LyoKICogV2luZUZpbGUKICogSXRhbGlhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAwIE1hcnRpbiBGdWNocwogKiBDb3B5cmlnaHQgMjAwMiBTdGV2ZW4gRWR3YXJkcwogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQKICogQ29weXJpZ2h0IDIwMDQgSXZhbiBMZW8gUHVvdGkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19JVEFMSUFOLCBTVUJMQU5HX05FVVRSQUwKCi8qIE1lbnUgKi8KCklETV9XSU5FRklMRSBNRU5VIEZJWEVEIElNUFVSRQp7CiAgICBQT1BVUCAiJkZpbGUiICB7CiAgICAgICAgTUVOVUlURU0gIiZBcHJpXHRJbnZpbyIsICAgICAgICAgICAgICAgIElEX0FDVElWQVRFCiAgICAgICAgTUVOVUlURU0gIiZTcG9zdGEuLi5cdEY3IiwgICAgICAgICAgICAgIElEX0ZJTEVfTU9WRQogICAgICAgIE1FTlVJVEVNICImQ29waWEuLi5cdEY4IiwgICAgICAgICAgICAgICBJRF9GSUxFX0NPUFkKICAgICAgICBNRU5VSVRFTSAiJk5lZ2xpIEFwcHVudGkuLi5cdEY5IiwgICAgICAgMTE4CiAgICAgICAgTUVOVUlURU0gIiZDYW5jZWxsYVx0RGVsIiwgICAgICAgICAgICAgIElEX0ZJTEVfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIlJpJm5vbWluYS4uLiIsICAgICAgICAgICAgICAgIDEwOQogICAgICAgIE1FTlVJVEVNICJQcm9wcmkmZXTgLi4uXHRBbHQrSW52aW8iLCAgICBJRF9FRElUX1BST1BFUlRJRVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiQyZvbXByaW1pLi4uIiwgICAgICAgICAgICAgICAgMTE5CiAgICAgICAgTUVOVUlURU0gIkRlYyZvbXByaW1pLi4uIiwgICAgICAgICAgICAgIDEyMAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRXNlZ3VpLi4uIiwgICAgICAgICAgICAgICAgICBJRF9FWEVDVVRFCiAgICAgICAgTUVOVUlURU0gIiZTdGFtcGEuLi4iLCAgICAgICAgICAgICAgICAgIDEwMgogICAgICAgIE1FTlVJVEVNICJBc3NvY2lhLi4uIiwgICAgICAgICAgICAgICAgICAxMDMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiQ3ImZWEgRGlyZWN0b3J5Li4uIiwgICAgICAgICAgMTExCiAgICAgICAgTUVOVUlURU0gIkNlcmMmYS4uLiIsICAgICAgICAgICAgICAgICAgIDEwNAogICAgICAgIE1FTlVJVEVNICImU2VsZXppb25hIGkgZmlsZS4uLiIsICAgICAgICAxMTYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJFJnNjaVx0QWx0K1giLCAgICAgICAgICAgICAgICBJRF9GSUxFX0VYSVQKI2Vsc2UKICAgICAgICBNRU5VSVRFTSAiRSZzY2kiLCAgICAgICAgICAgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbmRpZgogICAgfQoKICAgIFBPUFVQICImRGlzY28iICB7CiAgICAgICAgTUVOVUlURU0gIiZDb3BpYSBEaXNjby4uLiIsICAgICAgICAgICAgIDIwMQogICAgICAgIE1FTlVJVEVNICImRXRpY2hldHRhIERpc2NvLi4uIiwgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZvcm1hdHRhIERpc2NvLi4uIiwgICAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQogICAgICAgIE1FTlVJVEVNICImQ3JlYSBEaXNjbyBkaSBTaXN0ZW1hLi4uIiwgLTEgICAgLypUT0RPKi8KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkNvbm5ldHRpICYgRHJpdmUgZGkgUmV0ZSIsICAgIElEX0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNICImRGlzY29ubmV0dGkgRHJpdmUgZGkgUmV0ZSIsICBJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiQ29uZGl2aWRpIGNvbWUuLi4iLCAgICAgICAgICAgMjU0CiAgICAgICAgTUVOVUlURU0gIiZSaW11b3ZpIGNvbmRpdmlzaW9uZS4uLiIsICAgIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU2VsZXppb25hIERyaXZlLi4uIiwgICAgICAgICAyNTEKICAgIH0KCiAgICBQT1BVUCAiJkRpcmVjdG9yeSIgIHsKICAgICAgICBNRU5VSVRFTSAiJkxpdmVsbG8gU3VjZXNzaXZvXHQrIiwgICAgICAgMzAxCiAgICAgICAgTUVOVUlURU0gIkVzcGFuZGkgJkFsYmVyb1x0KiIsICAgICAgICAgIDMwMgogICAgICAgIE1FTlVJVEVNICJFc3BhbmRpICZ0dXR0b1x0U3RyZysqIiwgICAgICAzMDMKICAgICAgICBNRU5VSVRFTSAiUmlkdWNpICZBbGJlcm9cdC0iLCAgICAgICAgICAgMzA0CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTZWxlemlvbmEgdW5pdOAiLCAgICAgICAgICAgIDUwNQogICAgfQoKICAgIFBPUFVQICImVmlzdWFsaXp6YSIgIHsKICAgICAgICBNRU5VSVRFTSAiQSZsYmVybyBlIERpcmVjdG9yeSIsICAgICAgICAgNDEzCiAgICAgICAgTUVOVUlURU0gIlNvJmxvIEFsYmVybyIsICAgICAgICAgICAgICAgIDQxMQogICAgICAgIE1FTlVJVEVNICImU29sbyBEaXJlY3RvcnkiLCAgICAgICAgICAgICA0MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRGkmdmlkaSIsICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTm9tZSIsICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX05BTUUKICAgICAgICBNRU5VSVRFTSAiJk1vc3RyYSB0dXR0aSBpIGRldHRhZ2xpIHN1aSBmaWxlIixJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIiZNb3N0cmEgZGV0dGFnbGkgcGFyemlhbGkuLi4iLElEX1ZJRVdfU0VMRUNURURfQVRUUklCVVRFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImT3JkaW5hIHBlciBOb21lIiwgICAgICAgICAgICBJRF9WSUVXX1NPUlRfTkFNRQogICAgICAgIE1FTlVJVEVNICImT3JkaW5hIHBlciBUaXBvIiwgICAgICAgICAgICBJRF9WSUVXX1NPUlRfVFlQRQogICAgICAgIE1FTlVJVEVNICImT3JkaW5hIHBlciBEaW1lbnNpb25lIiwgICAgICBJRF9WSUVXX1NPUlRfU0laRQogICAgICAgIE1FTlVJVEVNICImT3JkaW5hIHBlciBEYXRhIiwgICAgICAgICAgICBJRF9WSUVXX1NPUlRfREFURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJPcmRpbmEgcGVyICYuLi4iLCAgICAgICAgICAgICBJRF9WSUVXX0ZJTFRFUgogICAgfQoKICAgIFBPUFVQICImT3B6aW9uaSIgIHsKICAgICAgICBNRU5VSVRFTSAiJkNvbmZlcm1hemlvbmUuLi4iLCAgICAgICAgICAgNTAxCiAgICAgICAgTUVOVUlURU0gIiZGb250Li4uIiwgICAgICAgICAgICAgICAgICAgIElEX1NFTEVDVF9GT05UCiAgICAgICAgTUVOVUlURU0gIiZQZXJzb25hbGl6emEgYmFycmEgZGVnbGkgc3RydW1lbnRpLi4uIiwgNTEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZCYXJyYSBkZWdsaSBzdHJ1bWVudGkiLCAgICAgIElEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJkJhcnJhIGRlaSBEcml2ZSIsICAgICAgICAgICAgSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJkJhcnJhIGRpIHN0YXRvIiwgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJBJiB0dXR0byBzY2hlcm1vXHRDdHJsK1NoaWZ0K1MiLElEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkVzZWd1aSBtaW5pbWl6emF0byIsICAgICAgICAgNTA0CiAgICAgICAgTUVOVUlURU0gIiZTYWx2YSBpbXBvc3RhemlvbmkgYWxsJ3VzY2l0YSIsNTExCiAgICB9CgoKICAgIFBPUFVQICImU2ljdXJlenphIiAgewogICAgICAgIE1FTlVJVEVNICImQWNjZXNzaS4uLiIsICAgICAgICAgICAgICAgICA2MDUKICAgICAgICBNRU5VSVRFTSAiJkxvZ2dpbmcuLi4iLCAgICAgICAgICAgICAgICAgNjA2CiAgICAgICAgTUVOVUlURU0gIiZQcm9wcmlldGFyaW8uLi4iLCAgICAgICAgICAgIDYwNwogICAgfQoKICAgIFBPUFVQICImRmluZXN0cmEiICB7CiAgICAgICAgTUVOVUlURU0gIk51b3ZhICZGaW5lc3RyYSIsICAgICAgICAgICAgIElEX1dJTkRPV19ORVcKICAgICAgICBNRU5VSVRFTSAiRmluZXN0cmUgYSBjYXNjYXRhXHRDdHJsK0Y1IiwgSURfV0lORE9XX0NBU0NBREUKICAgICAgICBNRU5VSVRFTSAiT3JkaW5hICZPcml6b250YWxtZW50ZSIsICAgICAgSURfV0lORE9XX1RJTEVfSE9SWgogICAgICAgIE1FTlVJVEVNICJPcmRpbmEgJlZlcnRpY2xtZW50ZVx0Q3RybCtGNCIsSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIkRpc3BvbmkgYXV0b21hdGljYW1lbnRlIiwgICAgIElEX1dJTkRPV19BVVRPU09SVAojZW5kaWYKICAgICAgICBNRU5VSVRFTSAiRGlzcG9uaSAmU2ltYm9saSIsICAgICAgICAgICAgSURfV0lORE9XX0FSUkFOR0UKICAgICAgICBNRU5VSVRFTSAiJkFnZ2lvcm5hXHRGNSIsICAgICAgICAgICAgICAgSURfUkVGUkVTSAogICAgfQoKICAgIFBPUFVQICImR3VpZGEiICB7CiAgICAgICAgTUVOVUlURU0gIiZTb21tYXJpbyBkZWxsYSBHdWlkYVx0RjEiLCAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJkNlcmNhIG5lbGxhIEd1aWRhLi4uXHRGMSIsICAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICImVXNvIGRlbGwgR3VpZGFcdEYxIiwgICAgICAgICBJRF9IRUxQX1VTSU5HCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZJbmZvcm1hemlvbmkgc3UgV2luZWZpbGUuLi4iLElEX0FCT1VUCiNpZmRlZiBfX1dJTkVfXwogICAgICAgIE1FTlVJVEVNICJJbmZvcm1hemlvbmkgc3UgJldpbmUuLi4iLCAgICBJRF9BQk9VVF9XSU5FCiNlbmRpZgogICAgfQp9CgoKSUREX0VYRUNVVEUgRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRXNlZ3VpIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIENPTlRST0wgICAgICAgICAiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCiAgICBDT05UUk9MICAgICAgICAgIiZDb21hbmRvOiIsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKICAgIEVESVRURVhUICAgICAgICAyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAogICAgQ09OVFJPTCAgICAgICAgICJDb21lICZTaW1ib2xvIiwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsbGEiLCAyLCAxNTgsIDIzLCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiJkFpdXRvIiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKSUREX1NFTEVDVF9ERVNUSU5BVElPTiBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJTZWxlY3QgZGVzdGluYXRpb24iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWNvIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCiAgICBDT05UUk9MICAgICAgICAgIiZQZXJjb3JzbzoiLCAtMSwgIlN0YXRpY28iLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAogICAgRURJVFRFWFQgICAgICAgIDIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgMSwgMTU4LCA2LCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiQW5udWxsYSIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImTmF2aWdhIiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0ZPTlRfU0VMX0RMR19OQU1FICAgIkFwcGxpY2EgbGUgaW1wb3N0YXppb25pIGRlaSBmb250IgogICAgSURTX0ZPTlRfU0VMX0VSUk9SICAgICAgIlNpIOggdmVyaWZpY2F0byB1biBlcnJvcmUgZHVyYW50ZSBsYSBzZWxlemlvbmUgZGVsIG51b3ZvIGZvbnQuIgp9Cg==