[Helix-client-dev] CR/CN: GMP Meta-editor fixes: Bug #18367, Issue #18358. [GMPMetaEditor branch]
Petar Basic <[email protected]> Fri, 28 Oct 2011 18:10:11 +0200
| Newsgroups | gmane.comp.multimedia.helix.devel |
|---|---|
| Message-ID | <CANKM9vRiwhY8mhxcd4La=sS0EJG-+60gBs94oCiWRHZHcMbcDw@mail.gmail.com> |
--14dae9cdc0d5b21b3704b05e1fbd Content-Type: text/plain; charset="UTF-8" Modified by: pbasic at real.com Date: 2011/10/28 Project: GMPMetaEditor (meta3gp.exe) Synopsis: GMP Meta-editor fixes: Bug #18367, Issue #18358. [GMPMetaEditor branch] Details: 1.) Fixed GMP Meta-editor (Redmine) Bug #18367: "meta3gp error with artist/composer over 255 chars". The code has been corrected to pass the value of meta-flavor parameter to all the routines which check the length of meta-data string parameters. 2.) Fixed GMP Meta-editor (Redmine) Issue #18358: "Metadata tool increases filesize although no metadata is added". The final output file contains a 'free' atom following the 'moov' atom. The space required for sample tables contained by the 'moov' atom seems to be overestimated by the mp4-filewriter. With this strategy, the 'free' atom can sometimes account for more than 10% of output file size which is not desirable. Quick fix is to employ already existing mp4-filewriter's "ForceMoovFirst" option. In this mode, mp4-filewriter uses a second temporary file to store the 'mdat' samples while it builds the sample tables in the 'moov' atom. The filewriter then simply appends 'mdat' atom right after the 'moov' atom without putting an extraneous 'free' atom between them. Usage of a second temporary file keeps the final output file size to the minimum, but probably reduces Meta-editor tool's performance. Some testing on larger files is required to determine whether more elaborate fixes are required at this moment. Files Modified: datatype/tools/dtdriver/apps/meta3gp/main.cpp datatype/tools/dtdriver/engine/ffdriver.cpp datatype/tools/dtdriver/engine/pub/ffdriver.h Platforms and Profiles Affected: All Image Size and Heap Use impact: None Platforms and Profiles Build Verified: system id: win32-i386-vc7 profile: helix-client-all-defines Platforms and Profiles Functionality Verified: x86 Windows XP SP2 Branch: GMPMetaEditor Copyright assignment: I am a RealNetworks employee or contractor. --14dae9cdc0d5b21b3704b05e1fbd Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Helix-client-dev mailing list [email protected] http://lists.helixcommunity.org/mailman/listinfo/helix-client-dev --14dae9cdc0d5b21b3704b05e1fbd Content-Type: application/octet-stream; name="datatype_tools_dtdriver_apps_meta3gp.diff" Content-Disposition: attachment; filename="datatype_tools_dtdriver_apps_meta3gp.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gubdnvgo0 SW5kZXg6IG1haW4uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvZGF0YXR5cGUv dG9vbHMvZHRkcml2ZXIvYXBwcy9tZXRhM2dwL21haW4uY3BwLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS43LjIuOQ0KZGlmZiAtVSAzMCAtdyAtZCAtSCAtcjEuNy4yLjkgbWFpbi5jcHANCi0tLSBt YWluLmNwcAk0IE5vdiAyMDEwIDEzOjI3OjA5IC0wMDAwCTEuNy4yLjkNCisrKyBtYWluLmNwcAky OCBPY3QgMjAxMSAxNToxMjo0OSAtMDAwMA0KQEAgLTY4LDgyICs2OCw4MyBAQA0KICNlbmRpZiAv L0hFTElYX0ZFQVRVUkVfTUVUQUVESVRfQVVESU9fSEFTSA0KIA0KIA0KIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqDQogICogIE1ldGEtZGF0YSBjb21tYW5kIGxpbmUgZWRpdG9yLg0KICAqICBCdWlsZC10 aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4NCiAgKi8NCiANCiAvLyBlbnZpcm9ubWVudCB2YXJp YWJsZSBuYW1lDQogI2RlZmluZSBQTFVHSU5fUEFUSF9FTlZfVkFSX05BTUUgIk1FVEEzR1BfUExV R0lOX1BBVEgiDQogDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiAgQ29tcG9uZW50IG9w ZXJhdGlvbmFsIG1vZGVzDQogICovDQogSFhCT09MIGdfYlVzZURlZmF1bHRNZXRhRWRpdG9yUHJv Y2Vzc29yID0gRkFMU0U7DQogSFhCT09MIGdfYlVzZURURHJpdmVyU3luY2hyb25vdXNNb2RlID0g VFJVRTsNCiANCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqICBETExBY2Nlc3NQYXRoIFZh cmlhYmxlDQogICovDQogRU5BQkxFX0RMTEFDQ0VTU19QQVRIUyhnX01ldGEzR1BBY2Nlc3NQYXRo KTsNCiANCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqICBEZWZpbmVzDQogICovDQogI2Rl ZmluZSBQUk9HUkFNX1ZFTkRPUl9TVFJJTkcgICAgICAgIlJlYWxOZXR3b3JrcyINCiAjZGVmaW5l IFBST0dSQU1fTkFNRV9TVFJJTkcgICAgICAgICBQUk9HUkFNX1ZFTkRPUl9TVFJJTkciIG1ldGEt ZGF0YSBlZGl0b3IiDQotI2RlZmluZSBQUk9HUkFNX0NPUFlSSUdIVF9TVFJJTkcgICAgIkNvcHly aWdodCAoYykgIlBST0dSQU1fVkVORE9SX1NUUklORyIgMjAxMCINCisjZGVmaW5lIFBST0dSQU1f Q09QWVJJR0hUX1NUUklORyAgICAiQ29weXJpZ2h0IChjKSAiUFJPR1JBTV9WRU5ET1JfU1RSSU5H IiAyMDExIg0KIA0KIC8vIGlucHV0L291dHB1dCBjb250cm9sDQogI2lmZGVmIF9XSU5ET1dTDQog I2RlZmluZSBPUFRJT05fU1RSSU5HX0FTWU5DTU9ERSAgICAgICJkZXYtYXN5bmNtb2RlIg0KICNl bmRpZiAvL19XSU5ET1dTDQogDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0RFRk1FVEFQUk9DICAg ICJkZXYtZGVmbWV0YXByb2MiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0lOUFVURklMRSAgICAg ICJpZiINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfT1VUUFVURklMRSAgICAgIm9mIg0KICNkZWZp bmUgT1BUSU9OX1NUUklOR19YTUxJTlBVVEZJTEUgICAieG1saW4iDQogI2RlZmluZSBPUFRJT05f U1RSSU5HX1hNTE9VVFBVVEZJTEUgICJ4bWxvdXQiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0NM RUFSTUVUQURBVEEgICJtZXRhY2xlYXIiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX01FVEFTVFlM RSAgICAgICJtZXRhc3R5bGUiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX1VURjE2T1VUUFVUICAg ICJ1dGYxNm91dCINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfVVRGOElOUFVUICAgICAgInV0Zjhp biINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfSUQzVjI0ME9VVFBVVCAgImlkM3YyNDAiDQogI2Rl ZmluZSBPUFRJT05fU1RSSU5HX0lEM1YyMzBPVVRQVVQgICJpZDN2MjMwIg0KICNkZWZpbmUgT1BU SU9OX1NUUklOR19JRDNWMk5PT1VUUFVUICAiaWQzdjJubyINCiAjZGVmaW5lIE9QVElPTl9TVFJJ TkdfVUlUU0xPQ0FUSU9OSUQzMiAidWl0c2xvY2lkMzIiDQogI2RlZmluZSBPUFRJT05fU1RSSU5H X09WRVJXUklURUZJTEUgICJvdmVyd3JpdGUiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0RJU0FC TEVQUk9HUkVTU0lWRURPV05MT0FEICJkaXNhYmxlcHJvZ3Jlc3NpdmVkb3dubG9hZCINCisjZGVm aW5lIE9QVElPTl9TVFJJTkdfTUlORklMRVNJWkUgICAgIm1pbmZpbGVzaXplIg0KICNkZWZpbmUg T1BUSU9OX1NUUklOR19QUklOVE1FVEFEQVRBICAicHJpbnQiDQogI2RlZmluZSBPUFRJT05fU1RS SU5HX0hFTFAgICAgICAgICAgICJoZWxwIg0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19HRU5FUkFU RUhBU0ggICAiYXVkaW9oYXNoIg0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19MT0dGSUxFICAgICAg ICAibG9nIg0KIA0KIC8vIGNvbW1vbiBtZXRhZGF0YQ0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19U SVRMRSAgICAgICAgICAgICJ0aXRsZSINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfQVJUSVNUICAg ICAgICAgICAiYXJ0aXN0Ig0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19BTEJVTSAgICAgICAgICAg ICJhbGJ1bSINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfR0VOUkUgICAgICAgICAgICAiZ2VucmUi DQogI2RlZmluZSBPUFRJT05fU1RSSU5HX0NPTVBPU0VSICAgICAgICAgImNvbXBvc2VyIg0KICNk ZWZpbmUgT1BUSU9OX1NUUklOR19DT01NRU5UICAgICAgICAgICJjb21tZW50Ig0KICNkZWZpbmUg T1BUSU9OX1NUUklOR19UUkFDS05VTUJFUiAgICAgICJ0cmFjayINCiAjZGVmaW5lIE9QVElPTl9T VFJJTkdfWUVBUiAgICAgICAgICAgICAieWVhciINCiANCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdf UElDVFVSRV9BREQgICAgICAiYWRkcGljIg0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19QSUNUVVJF X1JFTU9WRSAgICJyZW1waWMiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX1BJQ1RVUkVfQ0xFQVIg ICAgImNscnBpYyINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfUElDVFVSRV9FWFRSQUNUICAic2F2 ZXBpYyINCiANCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfVUlUU19JTlNFUlQgICAgICAiaW5zZXJ0 c2lnbmF0dXJlIg0KICNkZWZpbmUgT1BUSU9OX1NUUklOR19VSVRTX0VYVFJBQ1QgICAgICJleHRy YWN0c2lnbmF0dXJlIg0KIA0KIC8vIGlUdW5lcyBzcGVjaWZpYyBtZXRhZGF0YQ0KICNkZWZpbmUg T1BUSU9OX1NUUklOR19TT0ZUV0FSRSAgICAgInNvZnR3YXJlIg0KICNkZWZpbmUgT1BUSU9OX1NU UklOR19FTkNPREVEQlkgICAgImVuY29kZWRieSINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfR1JP VVBJTkcgICAgICJncm91cGluZyINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfQUxCVU1BUlRJU1Qg ICJhbGJ1bWFydGlzdCINCiAjZGVmaW5lIE9QVElPTl9TVFJJTkdfTFlSSUNTICAgICAgICJseXJp Y3MiDQogI2RlZmluZSBPUFRJT05fU1RSSU5HX1NVQlRJVExFICAgICAic3VidGl0bGUiDQpAQCAt ODU3LDE2NCArODU4LDE2NCBAQA0KIH0NCiANCiB2b2lkIFJlcG9ydEludmFsaWRWYWx1ZUZvck9w dGlvbihjb25zdCBjaGFyKiBvcHRpb25OYW1lLCBjb25zdCBFbmNvZGVkU3RyaW5nJiBvcHRpb25W YWx1ZVVURjgpDQogew0KICAgICBwcmludGYoIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiAtJXM6 ICIsIG9wdGlvbk5hbWUpOw0KICAgICBFbmNTdHJVdGlsczo6UHJpbnRUZXh0VVRGOChvcHRpb25W YWx1ZVVURjguR2V0RGF0YSgpKTsNCiAgICAgcHJpbnRmKCJcbiIpOw0KIH0NCiANCiBIWF9SRVNV TFQgUHJvY2Vzc1N0cmluZ09wdGlvbihib29sIGJTa2lwQXJnT25seSwgSW5wdXRPcHRpb24qIG9w dGlvbiwgTWV0YUluZm8mIG1ldGFpbmZvLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TWV0YUluZm86OmVTdHJpbmdNZXRhSXRlbSBpdGVtTmFtZSwgVUlOVDMyIG1ldGFGbGF2b3JGbGFn cykNCiB7DQogICAgIGlmKG9wdGlvbi0+T3B0aW9uVmFsdWVVVEY4LklzRW1wdHkoKSAmJiBvcHRp b24tPlhtbE9wdGlvblZhbHVlVVRGOC5Jc0VtcHR5KCkpDQogICAgIHsNCiAgICAgICAgIHJldHVy biBIWFJfUEFSU0VfRVJST1I7DQogICAgIH0NCiANCiAgICAgaWYoYlNraXBBcmdPbmx5KQ0KICAg ICB7DQogICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICB9DQogDQogICAgIGlmKG9wdGlvbi0+ WG1sT3B0aW9uVmFsdWVVVEY4LklzRW1wdHkoKSkNCiAgICAgew0KICAgICAgICAgaWYoTWV0YUlu Zm86OklzSXRlbVN1cHBvcnRlZEJ5QW55Rmxhdm9yKGl0ZW1OYW1lLCBtZXRhRmxhdm9yRmxhZ3Mp KQ0KICAgICAgICAgew0KICAgICAgICAgICAgIC8vIG9wdGlvbnMgYXJlIGJlaW5nIHJlYWQgZnJv bSB0aGUgY29tbWFuZCBsaW5lDQogICAgICAgICAgICAgRW5jb2RlZFN0cmluZyBzVmFsID0gb3B0 aW9uLT5PcHRpb25WYWx1ZVVURjg7DQogDQogICAgICAgICAgICAgaWYoTWV0YUluZm86OklzSXRl bVZhbHVlVmFsaWRGb3JGbGF2b3JzKGl0ZW1OYW1lLCBzVmFsLCBtZXRhRmxhdm9yRmxhZ3MpICYm DQotICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtZXRhaW5mby5TZXRTdHJpbmdJdGVtKGl0ZW1O YW1lLCBzVmFsKSkpDQorICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtZXRhaW5mby5TZXRTdHJp bmdJdGVtKGl0ZW1OYW1lLCBzVmFsLCBtZXRhRmxhdm9yRmxhZ3MpKSkNCiAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgIHJldHVybiBIWFJfT0s7DQogICAgICAgICAgICAgfQ0KIA0KICAg ICAgICAgICAgIFJlcG9ydEludmFsaWRWYWx1ZUZvck9wdGlvbihvcHRpb24tPk9wdGlvbk5hbWUs IG9wdGlvbi0+T3B0aW9uVmFsdWVVVEY4KTsNCiAgICAgICAgICAgICByZXR1cm4gSFhSX1BBUlNF X0VSUk9SOw0KICAgICAgICAgfQ0KIA0KICAgICAgICAgUmVwb3J0VW5zdXBwb3J0ZWRNZXRhU3R5 bGVPcHRpb24ob3B0aW9uLT5PcHRpb25OYW1lKTsNCiAgICAgICAgIHJldHVybiBIWFJfUEFSU0Vf RVJST1I7DQogICAgIH0NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICAgICAvLyB4bWwgb3B0aW9u cyBvdmVycmlkZSB0aGUgY29tbWFuZCBsaW5lLCBob3dldmVyLCB4bWwgb3B0aW9ucyBjYW4gbm90 IGJlIHNldCB1c2luZyB0aGUgZmxhdm9yLA0KICAgICAgICAgLy8gc28gaW4gdGhpcyBjYXNlLCBp ZiB0aGUgeG1sIG9wdGlvbiBoYXMgdmFsdWUgd2hpY2ggaXMgbm90IHZhbGlkIGZvciBmbGF2b3Is IHdlJ2xsIGp1c3QgaWdub3JlIGl0Lg0KICAgICAgICAgaWYoIU1ldGFJbmZvOjpJc0l0ZW1TdXBw b3J0ZWRCeUFueUZsYXZvcihpdGVtTmFtZSwgbWV0YUZsYXZvckZsYWdzKSkNCiAgICAgICAgIHsN CiAgICAgICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICAgICAgfQ0KIA0KICAgICAgICAgRW5j b2RlZFN0cmluZyBzVmFsID0gb3B0aW9uLT5YbWxPcHRpb25WYWx1ZVVURjg7DQogDQogICAgICAg ICBpZighTWV0YUluZm86OklzSXRlbVZhbHVlVmFsaWRGb3JGbGF2b3JzKGl0ZW1OYW1lLCBzVmFs LCBtZXRhRmxhdm9yRmxhZ3MpKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIHJldHVybiBIWFJf T0s7DQogICAgICAgICB9DQogICAgICAgICBlbHNlIA0KICAgICAgICAgew0KLSAgICAgICAgICAg IGlmKFNVQ0NFRURFRChtZXRhaW5mby5TZXRTdHJpbmdJdGVtKGl0ZW1OYW1lLCBzVmFsKSkpDQor ICAgICAgICAgICAgaWYoU1VDQ0VFREVEKG1ldGFpbmZvLlNldFN0cmluZ0l0ZW0oaXRlbU5hbWUs IHNWYWwsIG1ldGFGbGF2b3JGbGFncykpKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICAgcmV0dXJuIEhYUl9PSzsNCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogDQogICAgICAg ICBSZXBvcnRJbnZhbGlkVmFsdWVGb3JPcHRpb24ob3B0aW9uLT5PcHRpb25OYW1lLCBvcHRpb24t PlhtbE9wdGlvblZhbHVlVVRGOCk7DQogICAgICAgICByZXR1cm4gSFhSX1BBUlNFX0VSUk9SOw0K ICAgICB9DQogfQ0KIA0KIGlubGluZSBIWF9SRVNVTFQgUHJvY2Vzc0RlcGVuZGVudFN0cmluZ09w dGlvbihlQ29tbWFuZExpbmVQcm9jZXNzb3JQaGFzZSBwaGFzZSwgSW5wdXRPcHRpb24qIG9wdGlv biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFQcm9jZXNzb3JWYXJzJiBtcFZh cnMsIE1ldGFJbmZvOjplU3RyaW5nTWV0YUl0ZW0gaXRlbU5hbWUpDQogew0KICAgICByZXR1cm4g UHJvY2Vzc1N0cmluZ09wdGlvbigocGhhc2UgIT0gQ0xQUF9EZXBlbmRlbnRPcHRpb25zKSwNCiAg ICAgICAgICAgICAgICAgb3B0aW9uLCBtcFZhcnMuSW5qZWN0ZWRNZXRhSW5mbywgaXRlbU5hbWUs IG1wVmFycy5JbmplY3RlZE1ldGFGbGF2b3JzKTsNCiB9DQogDQogSFhfUkVTVUxUIFByb2Nlc3NV SW50T3B0aW9uKGJvb2wgYlNraXBBcmdPbmx5LCBJbnB1dE9wdGlvbiogb3B0aW9uLCBNZXRhSW5m byYgbWV0YWluZm8sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRhSW5mbzo6ZVVJ bnRNZXRhSXRlbSBpdGVtTmFtZSwgVUlOVDMyIG1ldGFGbGF2b3JGbGFncykNCiB7DQogICAgIGlm KG9wdGlvbi0+T3B0aW9uVmFsdWVVVEY4LklzRW1wdHkoKSAmJiBvcHRpb24tPlhtbE9wdGlvblZh bHVlVVRGOC5Jc0VtcHR5KCkpDQogICAgIHsNCiAgICAgICAgIHJldHVybiBIWFJfUEFSU0VfRVJS T1I7DQogICAgIH0NCiANCiAgICAgaWYoYlNraXBBcmdPbmx5KQ0KICAgICB7DQogICAgICAgICBy ZXR1cm4gSFhSX09LOw0KICAgICB9DQogDQogICAgIGlmKG9wdGlvbi0+WG1sT3B0aW9uVmFsdWVV VEY4LklzRW1wdHkoKSkNCiAgICAgew0KICAgICAgICAgaWYoTWV0YUluZm86OklzSXRlbVN1cHBv cnRlZEJ5QW55Rmxhdm9yKGl0ZW1OYW1lLCBtZXRhRmxhdm9yRmxhZ3MpKQ0KICAgICAgICAgew0K ICAgICAgICAgICAgIC8vIG9wdGlvbnMgYXJlIGJlaW5nIHJlYWQgZnJvbSB0aGUgY29tbWFuZCBs aW5lDQogICAgICAgICAgICAgRW5jb2RlZFN0cmluZyBzVmFsID0gb3B0aW9uLT5PcHRpb25WYWx1 ZVVURjg7DQogDQogICAgICAgICAgICAgVUlOVDMyIHVWYWwgPSAwOw0KICAgICAgICAgICAgIGlm KFByb3BUb29sczo6RXh0cmFjdFVJbnQzMih1VmFsLCBzVmFsKSkNCiAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgIGlmKE1ldGFJbmZvOjpJc0l0ZW1WYWx1ZVZhbGlkRm9yRmxhdm9ycyhp dGVtTmFtZSwgdVZhbCwgbWV0YUZsYXZvckZsYWdzKSAmJg0KLSAgICAgICAgICAgICAgICAgICAg U1VDQ0VFREVEKG1ldGFpbmZvLlNldFVJbnRJdGVtKGl0ZW1OYW1lLCB1VmFsLCBUUlVFKSkpDQor ICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobWV0YWluZm8uU2V0VUludEl0ZW0oaXRlbU5h bWUsIHVWYWwsIFRSVUUsIG1ldGFGbGF2b3JGbGFncykpKQ0KICAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIFJlcG9ydEludmFsaWRWYWx1ZUZvck9wdGlvbihv cHRpb24tPk9wdGlvbk5hbWUsIG9wdGlvbi0+T3B0aW9uVmFsdWVVVEY4KTsNCiAgICAgICAgICAg ICByZXR1cm4gSFhSX1BBUlNFX0VSUk9SOw0KICAgICAgICAgfQ0KIA0KICAgICAgICAgUmVwb3J0 VW5zdXBwb3J0ZWRNZXRhU3R5bGVPcHRpb24ob3B0aW9uLT5PcHRpb25OYW1lKTsNCiAgICAgICAg IHJldHVybiBIWFJfUEFSU0VfRVJST1I7DQogICAgIH0NCiAgICAgZWxzZQ0KICAgICB7DQogICAg ICAgICAvLyB4bWwgb3B0aW9ucyBvdmVycmlkZSB0aGUgY29tbWFuZCBsaW5lLCBob3dldmVyLCB4 bWwgb3B0aW9ucyBjYW4gbm90IGJlIHNldCB1c2luZyB0aGUgZmxhdm9yLA0KICAgICAgICAgLy8g c28gaW4gdGhpcyBjYXNlLCBpZiB0aGUgeG1sIG9wdGlvbiBoYXMgdmFsdWUgd2hpY2ggaXMgbm90 IHZhbGlkIGZvciBmbGF2b3IsIHdlJ2xsIGp1c3QgaWdub3JlIGl0Lg0KICAgICAgICAgaWYoIU1l dGFJbmZvOjpJc0l0ZW1TdXBwb3J0ZWRCeUFueUZsYXZvcihpdGVtTmFtZSwgbWV0YUZsYXZvckZs YWdzKSkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICAgICAg fQ0KIA0KICAgICAgICAgRW5jb2RlZFN0cmluZyBzVmFsID0gb3B0aW9uLT5YbWxPcHRpb25WYWx1 ZVVURjg7DQogDQogICAgICAgICBVSU5UMzIgdVZhbCA9IDA7DQogICAgICAgICBpZihQcm9wVG9v bHM6OkV4dHJhY3RVSW50MzIodVZhbCwgc1ZhbCkpDQogICAgICAgICB7DQogICAgICAgICAgICAg aWYoIU1ldGFJbmZvOjpJc0l0ZW1WYWx1ZVZhbGlkRm9yRmxhdm9ycyhpdGVtTmFtZSwgdVZhbCwg bWV0YUZsYXZvckZsYWdzKSkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHJldHVy biBIWFJfT0s7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGVsc2UgDQogICAgICAgICAg ICAgew0KLSAgICAgICAgICAgICAgICBpZihTVUNDRUVERUQobWV0YWluZm8uU2V0VUludEl0ZW0o aXRlbU5hbWUsIHVWYWwsIFRSVUUpKSkNCisgICAgICAgICAgICAgICAgaWYoU1VDQ0VFREVEKG1l dGFpbmZvLlNldFVJbnRJdGVtKGl0ZW1OYW1lLCB1VmFsLCBUUlVFLCBtZXRhRmxhdm9yRmxhZ3Mp KSkNCiAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhYUl9P SzsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiANCiAg ICAgICAgIFJlcG9ydEludmFsaWRWYWx1ZUZvck9wdGlvbihvcHRpb24tPk9wdGlvbk5hbWUsIG9w dGlvbi0+WG1sT3B0aW9uVmFsdWVVVEY4KTsNCiAgICAgICAgIHJldHVybiBIWFJfUEFSU0VfRVJS T1I7DQogICAgIH0NCiB9DQogDQogaW5saW5lIEhYX1JFU1VMVCBQcm9jZXNzRGVwZW5kZW50VUlu dE9wdGlvbihlQ29tbWFuZExpbmVQcm9jZXNzb3JQaGFzZSBwaGFzZSwgSW5wdXRPcHRpb24qIG9w dGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFQcm9jZXNzb3JWYXJzJiBt cFZhcnMsIE1ldGFJbmZvOjplVUludE1ldGFJdGVtIGl0ZW1OYW1lKQ0KIHsNCiAgICAgcmV0dXJu IFByb2Nlc3NVSW50T3B0aW9uKChwaGFzZSAhPSBDTFBQX0RlcGVuZGVudE9wdGlvbnMpLA0KICAg ICAgICAgICAgICAgICBvcHRpb24sIG1wVmFycy5JbmplY3RlZE1ldGFJbmZvLCBpdGVtTmFtZSwg bXBWYXJzLkluamVjdGVkTWV0YUZsYXZvcnMpOw0KIH0NCiANCiBIWF9SRVNVTFQgUHJvY2Vzc0tl eXdvcmRTdHJpbmdPcHRpb24oYm9vbCBiU2tpcEFyZ09ubHksIElucHV0T3B0aW9uKiBvcHRpb24s DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hYUHRyQXJyYXkmIGFLZXl3 b3JkcywgVUlOVDMyIG1ldGFGbGF2b3JGbGFncykNCiB7DQogICAgIGlmKG9wdGlvbi0+T3B0aW9u VmFsdWVVVEY4LklzRW1wdHkoKSkNCiAgICAgew0KICAgICAgICAgcmV0dXJuIEhYUl9QQVJTRV9F UlJPUjsNCiAgICAgfQ0KIA0KICAgICBpZihiU2tpcEFyZ09ubHkpDQogICAgIHsNCiAgICAgICAg IHJldHVybiBIWFJfT0s7DQogICAgIH0NCkBAIC0xMDUwLDYxICsxMDUxLDYxIEBADQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0YUluZm86OmVTdHJpbmdNZXRhSXRlbSBp dGVtTmFtZSwgVUlOVDMyIG1ldGFGbGF2b3JGbGFncykNCiB7DQogICAgIGlmKG9wdGlvbi0+T3B0 aW9uVmFsdWVVVEY4LklzRW1wdHkoKSkNCiAgICAgew0KICAgICAgICAgcmV0dXJuIEhYUl9QQVJT RV9FUlJPUjsNCiAgICAgfQ0KIA0KICAgICBpZihiU2tpcEFyZ09ubHkpDQogICAgIHsNCiAgICAg ICAgIHJldHVybiBIWFJfT0s7DQogICAgIH0NCiANCiAgICAgaWYoTWV0YUluZm86OklzSXRlbVN1 cHBvcnRlZEJ5QW55Rmxhdm9yKGl0ZW1OYW1lLCBtZXRhRmxhdm9yRmxhZ3MpKQ0KICAgICB7DQog ICAgICAgICAvLyByZWFkLWluIHRoZSBmaWxlIGNvbnRlbnRzDQogICAgICAgICBDSFhTdHJpbmcg c0ZpbGVOYW1lID0gb3B0aW9uLT5HZXRFZmZlY3RpdmVPcHRpb25WYWx1ZUNDUCgpOw0KICAgICAg ICAgaWYoIXNGaWxlTmFtZS5Jc0VtcHR5KCkgJiYgQ0hYRmlsZVNwZWNVdGlsczo6RmlsZUV4aXN0 cyhDSFhGaWxlU3BlY2lmaWVyKHNGaWxlTmFtZSkpKQ0KICAgICAgICAgew0KICAgICAgICAgICAg IEVuY29kZWRTdHJpbmcgc1hNTDsNCiAgICAgICAgICAgICBIWF9SRVNVTFQgcmV0VmFsID0gTWV0 YUluZm86OkxvYWRYTUxTdHJpbmdGcm9tRmlsZSgoY29uc3QgY2hhciopc0ZpbGVOYW1lLCBzWE1M KTsNCiANCiAgICAgICAgICAgICBpZihGQUlMRUQocmV0VmFsKSkNCiAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgIHByaW50ZigiVW5zdXBwb3J0ZWQgZW5jb2RpbmcgaW4gVUlUUyBmaWxl OiAlc1xuIiwgKGNvbnN0IGNoYXIqKXNGaWxlTmFtZSk7DQogICAgICAgICAgICAgICAgIHByb2dS ZXRDb2RlID0gUkNfRVJST1JfVU5TVVBQT1JURURfSU5QVVRfVUlUU19FTkNPRElORzsNCiAgICAg ICAgICAgICAgICAgcmV0dXJuIEhYUl9GQUlMRUQ7DQogICAgICAgICAgICAgfQ0KIA0KICAgICAg ICAgICAgIGlmKFNVQ0NFRURFRChyZXRWYWwpICYmDQogICAgICAgICAgICAgICAgTWV0YUluZm86 OklzSXRlbVZhbHVlVmFsaWRGb3JGbGF2b3JzKGl0ZW1OYW1lLCBzWE1MLCBtZXRhRmxhdm9yRmxh Z3MpICYmDQotICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1ldGFpbmZvLlNldFN0cmluZ0l0ZW0o aXRlbU5hbWUsIHNYTUwpKSkNCisgICAgICAgICAgICAgICBTVUNDRUVERUQobWV0YWluZm8uU2V0 U3RyaW5nSXRlbShpdGVtTmFtZSwgc1hNTCwgbWV0YUZsYXZvckZsYWdzKSkpDQogICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgICByZXR1cm4gSFhSX09LOw0KICAgICAgICAgICAgIH0NCiAg ICAgICAgIH0NCiAgICAgICAgIGVsc2UNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBwcmludGYo IkZhaWxlZCB0byBvcGVuIFVJVFMgZmlsZTogJXNcbiIsIChjb25zdCBjaGFyKilzRmlsZU5hbWUp Ow0KICAgICAgICAgICAgIHByb2dSZXRDb2RlID0gUkNfRVJST1JfQ0FOTk9UX09QRU5fSU5QVVRf VUlUU19GSUxFOw0KICAgICAgICAgICAgIHJldHVybiBIWFJfRkFJTEVEOw0KICAgICAgICAgfQ0K IA0KICAgICAgICAgUmVwb3J0SW52YWxpZFZhbHVlRm9yT3B0aW9uKG9wdGlvbi0+T3B0aW9uTmFt ZSwgb3B0aW9uLT5PcHRpb25WYWx1ZVVURjgpOw0KICAgICAgICAgcmV0dXJuIEhYUl9QQVJTRV9F UlJPUjsNCiAgICAgfQ0KIA0KICAgICBSZXBvcnRVbnN1cHBvcnRlZE1ldGFTdHlsZU9wdGlvbihv cHRpb24tPk9wdGlvbk5hbWUpOw0KICAgICByZXR1cm4gSFhSX1BBUlNFX0VSUk9SOw0KIH0NCiAN CiBIWF9SRVNVTFQgUHJvY2Vzc1JlbW92ZVBpY3R1cmVPcHRpb24oYm9vbCBiU2tpcEFyZ09ubHks IElucHV0T3B0aW9uKiBvcHRpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD SFhQdHJBcnJheSYgYVJlbW92ZWRQaWN0dXJlVHlwZXMsIFVJTlQzMiBtZXRhRmxhdm9yRmxhZ3Mp DQogew0KICAgICBpZihvcHRpb24tPk9wdGlvblZhbHVlVVRGOC5Jc0VtcHR5KCkpDQogICAgIHsN CiAgICAgICAgIHJldHVybiBIWFJfUEFSU0VfRVJST1I7DQogICAgIH0NCiANCiAgICAgaWYoYlNr aXBBcmdPbmx5KQ0KICAgICB7DQogICAgICAgICByZXR1cm4gSFhSX09LOw0KQEAgLTE3NTMsNzkg KzE3NTQsODEgQEANCiAgICAgVUlOVDMyIHN0YXJ0VGltZSA9IDA7DQogICAgIENIWEZpbGVTcGVj aWZpZXIgZXhlRmlsZVNwZWM7DQogICAgIEhYQk9PTCBiVXNpbmdMb2cgPSBGQUxTRTsNCiANCiAg ICAgRExMQWNjZXNzKiBwRExMQWNjZXNzID0gMDsNCiAgICAgRlBIWE1FRElBUExBVEZPUk1PUEVO IGZwSFhNZWRpYVBsYXRmb3JtT3BlbiA9IDA7DQogICAgIEZQSFhDUkVBVEVNRURJQVBMQVRGT1JN IGZwSFhDcmVhdGVNZWRpYVBsYXRmb3JtID0gMDsNCiAgICAgRlBIWE1FRElBUExBVEZPUk1DTE9T RSBmcEhYTWVkaWFQbGF0Zm9ybUNsb3NlID0gMDsNCiANCiAgICAgSUhYTWVkaWFQbGF0Zm9ybSog cE1lZGlhUGxhdGZvcm0gPSAwOw0KICAgICBJSFhDb21tb25DbGFzc0ZhY3RvcnkqIHBDb21tb25D bGFzc0ZhY3RvcnkgPSAwOw0KICAgICBDSFhYbWxJbnB1dFBhcnNlciogcElucHV0UGFyc2VyID0g MDsNCiAgICAgSUhYTWV0YURhdGFFZGl0b3IqIHBFZGl0b3IgPSAwOw0KICAgICBDUmVzcG9uc2Uq IHBSZXNwb25zZSA9IDA7DQogICAgIENQcm9jZXNzb3IqIHBQcm9jZXNzb3IgPSAwOw0KICAgICBJ SFhWYWx1ZXMqIHBPcHRpb25zID0gMDsNCiANCiAgICAgY2hhciBwRGxsUGF0aFtfTUFYX1BBVEhd ID0gezB9Ow0KICAgICBjaGFyIHBEbGxGaWxlW19NQVhfUEFUSF0gPSB7MH07DQogICAgIGNvbnN0 IGNoYXIqIHBzekhlbGl4UGx1Z2luUGF0aCA9IDA7DQogDQogICAgIENIWFN0cmluZyBzdHJJbnB1 dEZpbGVOYW1lOw0KICAgICBDSFhTdHJpbmcgc3RyT3V0cHV0RmlsZU5hbWU7DQogICAgIENIWFN0 cmluZyBzdHJPdXRwdXRYTUxGaWxlTmFtZTsNCiAgICAgQ0hYU3RyaW5nIHN0clBpY3R1cmVGaWxl TmFtZVByZWZpeDsNCiAgICAgQ0hYU3RyaW5nIHN0clVJVFNEYXRhT3V0cHV0RmlsZU5hbWU7DQog ICAgIENIWFN0cmluZyBzdHJNZXRhU3R5bGVOYW1lOw0KIA0KICAgICBIWEJPT0wgYkRpc3BsYXlI ZWxwID0gRkFMU0U7DQogICAgIEhYQk9PTCBiT3ZlcndyaXRlRmlsZSA9IEZBTFNFOw0KKyAgICBI WEJPT0wgYk1pbkZpbGVTaXplID0gRkFMU0U7DQogICAgIEhYQk9PTCBiRGlzYWJsZVByb2dyZXNz aXZlRG93bmxvYWQgPSBGQUxTRTsNCiAgICAgSFhCT09MIGJQcmludE1ldGFEYXRhID0gRkFMU0U7 DQogICAgIEhYQk9PTCBiRXh0cmFjdFBpY3R1cmVzVG9GaWxlcyA9IEZBTFNFOw0KICAgICBIWEJP T0wgYlVURjE2T3V0cHV0ID0gRkFMU0U7DQogICAgIEhYQk9PTCBiVVRGOElucHV0ID0gRkFMU0U7 DQogICAgIFVJTlQzMiB1bE1ldGFEYXRhVUlUU0xvY2F0aW9uID0gTUVUQURBVEFVSVRTTE9DQVRJ T05fVUlUU0FUT007DQogICAgIFVJTlQzMiB1bE1ldGFEYXRhSUQzVmVyc2lvbk91dHB1dCA9IE1F VEFEQVRBSUQzVkVSU0lPTl8yNDA7DQogDQogICAgIE1ldGFQcm9jZXNzb3JWYXJzIG1ldGFQcm9j ZXNzb3JWYXJzOw0KIA0KICAgICAvLyBjb25zdHJ1Y3Qgb3B0aW9uIHJlZ2lzdHJ5DQogICAgIE9w dGlvblJlZ2lzdHJ5IG9wdGlvblJlZzsNCiANCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0aW9u RGVzYyhPUFRJT05fU1RSSU5HX0xPR0ZJTEUsICI8ZmlsZW5hbWU+IiwgInJlZGlyZWN0IGNvbnNv bGUgb3V0cHV0IHRvIGxvZyBmaWxlIiwgMSkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRp b25EZXNjKE9QVElPTl9TVFJJTkdfSU5QVVRGSUxFLCAiPGZpbGVuYW1lPiIsICJpbnB1dCBmaWxl IiwgMSwgIi9hbGJ1bXMvYWxidW0vdHJhY2svbWVkaWFGaWxlL2ZpbGVOYW1lIikpOw0KICAgICBv cHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfT1VUUFVURklMRSwgIjxm aWxlbmFtZT4iLCAib3V0cHV0IGZpbGUiLCAxLCAiL2FsYnVtcy9hbGJ1bS90cmFjay9vdXRwdXRG aWxlTmFtZSIpKTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0aW9uRGVzYyhPUFRJT05fU1RS SU5HX1hNTElOUFVURklMRSwgIjxmaWxlbmFtZT4iLCAiWE1MIGZpbGUgd2l0aCBpbnB1dCBwYXJh bWV0ZXJzIiwgMSkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9T VFJJTkdfWE1MT1VUUFVURklMRSwgIjxmaWxlbmFtZT4iLCAibWV0YWRhdGEgb3V0cHV0IFhNTCBm aWxlIiwgMSkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJ TkdfT1ZFUldSSVRFRklMRSwgMCwgIm92ZXJ3cml0ZSBvdXRwdXQgZmlsZSBpZiBpdCBleGlzdHMi LCAwKSk7DQorICAgIG9wdGlvblJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19N SU5GSUxFU0laRSwgMCwgImtlZXAgb3V0cHV0IGZpbGUgc2l6ZSBhcyBzbWFsbCBhcyBwb3NzaWJs ZSAobm8gZnJlZSBhdG9tcykiLCAwKSk7DQogICAgIG9wdGlvblJlZy5BZGQobmV3IE9wdGlvbkRl c2MoT1BUSU9OX1NUUklOR19ESVNBQkxFUFJPR1JFU1NJVkVET1dOTE9BRCwgMCwgImRpc2FibGUg cHJvZ3Jlc3NpdmUgZG93bmxvYWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIG5vdCB1c2lu ZyBodHRwIG9yIGZ0cCBwcm90b2NvbCIsIDApKTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0 aW9uRGVzYyhPUFRJT05fU1RSSU5HX0NMRUFSTUVUQURBVEEsIDAsICJjbGVhciBhbGwgZXh0cmFj dGVkIG1ldGFkYXRhIGJlZm9yZSBpbmplY3Rpb24iLCAwKSk7DQogICAgIG9wdGlvblJlZy5BZGQo bmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19NRVRBU1RZTEUsICI8M0dQUCB8IGlUdW5lcz4i LCAiZmxhdm9yIG9mIGluamVjdGVkIG1ldGFkYXRhIiwgMSkpOw0KICAgICBvcHRpb25SZWcuQWRk KG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfVVRGMTZPVVRQVVQsIDAsICJ1c2UgVVRGMTYg Zm9ybWF0IHRvIHN0b3JlIHN0cmluZ3MgaW4gb3V0cHV0IGZpbGUiLCAwKSk7DQogICAgIG9wdGlv blJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19VVEY4SU5QVVQsIDAsICJwYXJz ZSBjb21tYW5kIGxpbmUgYXMgVVRGOCBzdHJpbmdzIiwgMCkpOw0KICAgICBvcHRpb25SZWcuQWRk KG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfSUQzVjI0ME9VVFBVVCwgMCwgImluamVjdCBJ RDN2MiB2ZXJzaW9uIDIuNC4wLCBkZWZhdWx0IiwgMCkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5l dyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfSUQzVjIzME9VVFBVVCwgMCwgImluamVjdCBJRDN2 MiB2ZXJzaW9uIDIuMy4wIiwgMCkpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNj KE9QVElPTl9TVFJJTkdfSUQzVjJOT09VVFBVVCwgMCwgInNraXAgaW5qZWN0aW5nIElEM3YyIHRh ZyIsIDApKTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0aW9uRGVzYyhPUFRJT05fU1RSSU5H X1VJVFNMT0NBVElPTklEMzIsIDAsICJpbmplY3QgVUlUUyBkYXRhIGludG8gSUQzMiBhdG9tIChs ZWdhY3kgbW9kZSkiLCAwKSk7DQogICAgIG9wdGlvblJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BU SU9OX1NUUklOR19QUklOVE1FVEFEQVRBLCAwLCAicHJpbnQgdXBkYXRlZCBtZXRhZGF0YSIsIDAp KTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcgT3B0aW9uRGVzYyhPUFRJT05fU1RSSU5HX1BJQ1RV UkVfRVhUUkFDVCwgIltmaWxlbmFtZSBwcmVmaXhdIiwgInNhdmUgZXh0cmFjdGVkIHBpY3R1cmVz IiwgLTEpKTsNCiANCiAjaWZkZWYgSEVMSVhfRkVBVFVSRV9NRVRBRURJVF9BVURJT19IQVNIDQog ICAgIG9wdGlvblJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19HRU5FUkFURUhB U0gsIDAsICJnZW5lcmF0ZSBoYXNoIiwgMCkpOw0KICNlbmRpZiAvL0hFTElYX0ZFQVRVUkVfTUVU QUVESVRfQVVESU9fSEFTSA0KIA0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKCkp Ow0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfVElUTEUs ICI8c3RyaW5nPiIsICJ1cGRhdGUgdGl0bGUiLCAxLCAiL2FsYnVtcy9hbGJ1bS90cmFjay9uYW1l IikpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfQVJU SVNULCAiPHN0cmluZz4iLCAidXBkYXRlIDNHUFAgcGVyZm9ybWVyLCBpVHVuZXMgYXJ0aXN0Iiwg MSwgIi9hbGJ1bXMvYWxidW0vdHJhY2svYXJ0aXN0L25hbWUiKSk7DQogICAgIG9wdGlvblJlZy5B ZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19BTEJVTSwgIjxzdHJpbmc+IiwgInVwZGF0 ZSBhbGJ1bSIsIDEsICIvYWxidW1zL2FsYnVtL25hbWUiKSk7DQogICAgIG9wdGlvblJlZy5BZGQo bmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19HRU5SRSwgIjxzdHJpbmc+IiwgInVwZGF0ZSBn ZW5yZSIsIDEsICIvYWxidW1zL2FsYnVtL3RyYWNrL3N0eWxlL25hbWUiKSk7DQogICAgIG9wdGlv blJlZy5BZGQobmV3IE9wdGlvbkRlc2MoT1BUSU9OX1NUUklOR19DT01QT1NFUiwgIjxzdHJpbmc+ IiwgInVwZGF0ZSAzR1BQIGF1dGhvciwgaVR1bmVzIGNvbXBvc2VyIiwgMSwgIi9hbGJ1bXMvYWxi dW0vdHJhY2svYXJ0aXN0L2NvbXBvc2VyIikpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRp b25EZXNjKE9QVElPTl9TVFJJTkdfQ09NTUVOVCwgIjxzdHJpbmc+IiwgInVwZGF0ZSAzR1BQIGRl c2NyaXB0aW9uLCBpVHVuZXMgY29tbWVudCIsIDEsICIvYWxidW1zL2FsYnVtL3BsaW5lIikpOw0K ICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfQ09QWVJJR0hU LCAiPHN0cmluZz4iLCAidXBkYXRlIGNvcHlyaWdodCIsIDEsICIvYWxidW1zL2FsYnVtL2NsaW5l IikpOw0KICAgICBvcHRpb25SZWcuQWRkKG5ldyBPcHRpb25EZXNjKE9QVElPTl9TVFJJTkdfVFJB Q0tOVU1CRVIsICI8aW50ZWdlciAwLi4yNTU+IiwgInVwZGF0ZSB0cmFjayBudW1iZXIiLCAxLCAi L2FsYnVtcy9hbGJ1bS90cmFjay9zZXF1ZW5jZSIpKTsNCiAgICAgb3B0aW9uUmVnLkFkZChuZXcg T3B0aW9uRGVzYyhPUFRJT05fU1RSSU5HX1lFQVIsICI8aW50ZWdlciAwLi42NTUzNj4iLCAidXBk YXRlIDNHUFAgcmVjb3JkaW5nIHllYXIsIGlUdW5lcyByZWxlYXNlIGRhdGUiLCAxLCAiL2FsYnVt cy9hbGJ1bS9PcmlnUmVsZWFzZVllYXIiKSk7DQogICAgIHsNCiAgICAgICAgIC8vIEFkZCBwaWN0 dXJlDQogICAgICAgICBDSFhQdHJBcnJheSogcFBpY3R1cmVBZGRYUGF0aHMgPSBuZXcgQ0hYUHRy QXJyYXk7DQogICAgICAgICBwUGljdHVyZUFkZFhQYXRocy0+QWRkKG5ldyBDSFhTdHJpbmcoIi9h bGJ1bXMvYWxidW0vaW1hZ2UvZmlsZU5hbWUiKSk7DQpAQCAtMjIxOSw2MCArMjIyMiw2NCBAQA0K ICAgICAgICAgICAgICAgICBiRGlzcGxheUhlbHAgPSBUUlVFOw0KICAgICAgICAgICAgIH0NCiAN CiAjaWZkZWYgX1dJTkRPV1MNCiAgICAgICAgICAgICBlbHNlIGlmKHN0ck9wdGlvbiA9PSBPUFRJ T05fU1RSSU5HX0FTWU5DTU9ERSkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIGdf YlVzZURURHJpdmVyU3luY2hyb25vdXNNb2RlID0gRkFMU0U7DQogICAgICAgICAgICAgfQ0KICNl bmRpZiAvL19XSU5ET1dTDQogDQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0gT1BU SU9OX1NUUklOR19ERUZNRVRBUFJPQykNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg IGdfYlVzZURlZmF1bHRNZXRhRWRpdG9yUHJvY2Vzc29yID0gVFJVRTsNCiAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0gT1BUSU9OX1NUUklOR19MT0dGSUxF KQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZywgYWxyZWFk eSBwcm9jZXNzZWQNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRp b24gPT0gT1BUSU9OX1NUUklOR19JTlBVVEZJTEUpDQogICAgICAgICAgICAgew0KICAgICAgICAg ICAgICAgICBzdHJJbnB1dEZpbGVOYW1lID0gb3B0aW9uLT5HZXRFZmZlY3RpdmVPcHRpb25WYWx1 ZUNDUCgpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIGlmKHN0ck9wdGlvbiA9 PSBPUFRJT05fU1RSSU5HX09VVFBVVEZJTEUpDQogICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICBzdHJPdXRwdXRGaWxlTmFtZSA9IG9wdGlvbi0+R2V0RWZmZWN0aXZlT3B0aW9uVmFsdWVD Q1AoKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0g T1BUSU9OX1NUUklOR19PVkVSV1JJVEVGSUxFKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICAgYk92ZXJ3cml0ZUZpbGUgPSBUUlVFOw0KICAgICAgICAgICAgIH0NCisgICAgICAgICAg ICBlbHNlIGlmKHN0ck9wdGlvbiA9PSBPUFRJT05fU1RSSU5HX01JTkZJTEVTSVpFKQ0KKyAgICAg ICAgICAgIHsNCisgICAgICAgICAgICAgICAgYk1pbkZpbGVTaXplID0gVFJVRTsNCisgICAgICAg ICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0gT1BUSU9OX1NUUklOR19E SVNBQkxFUFJPR1JFU1NJVkVET1dOTE9BRCkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgIGJEaXNhYmxlUHJvZ3Jlc3NpdmVEb3dubG9hZCA9IFRSVUU7DQogICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgIGVsc2UgaWYoc3RyT3B0aW9uID09IE9QVElPTl9TVFJJTkdfQ0xFQVJNRVRB REFUQSkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIG1ldGFQcm9jZXNzb3JWYXJz LkNsZWFyTWV0YURhdGEgPSBUUlVFOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNl IGlmKHN0ck9wdGlvbiA9PSBPUFRJT05fU1RSSU5HX1BSSU5UTUVUQURBVEEpDQogICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgICBiUHJpbnRNZXRhRGF0YSA9IFRSVUU7DQogICAgICAgICAg ICAgfQ0KIA0KICNpZmRlZiBIRUxJWF9GRUFUVVJFX01FVEFFRElUX0FVRElPX0hBU0gNCiAgICAg ICAgICAgICBlbHNlIGlmKHN0ck9wdGlvbiA9PSBPUFRJT05fU1RSSU5HX0dFTkVSQVRFSEFTSCkN CiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIG1ldGFQcm9jZXNzb3JWYXJzLkdlbmVy YXRlSGFzaCA9IFRSVUU7DQogICAgICAgICAgICAgfQ0KICNlbmRpZiAvL0hFTElYX0ZFQVRVUkVf TUVUQUVESVRfQVVESU9fSEFTSA0KIA0KICAgICAgICAgICAgIGVsc2UgaWYoc3RyT3B0aW9uID09 IE9QVElPTl9TVFJJTkdfWE1MSU5QVVRGSUxFKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICAgLy8gZG8gbm90aGluZywgYWxyZWFkeSBwcm9jZXNzZWQNCiAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgZWxzZSBpZihzdHJPcHRpb24gPT0gT1BUSU9OX1NUUklOR19YTUxPVVRQVVRG SUxFKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgc3RyT3V0cHV0WE1MRmlsZU5h bWUgPSBvcHRpb24tPkdldEVmZmVjdGl2ZU9wdGlvblZhbHVlQ0NQKCk7DQogICAgICAgICAgICAg fQ0KICAgICAgICAgICAgIGVsc2UgaWYoc3RyT3B0aW9uID09IE9QVElPTl9TVFJJTkdfTUVUQVNU WUxFKQ0KICAgICAgICAgICAgIHsNCkBAIC0yNjYwLDYwICsyNjY3LDY1IEBADQogDQogICAgIC8v IGluaXRpYWxpemUgb3B0aW9ucw0KICAgICByZXRWYWwgPSBDcmVhdGVJbnN0YW5jZUNDRl9RSShD TFNJRF9JSFhWYWx1ZXMsIElJRF9JSFhWYWx1ZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHZvaWQqKikmcE9wdGlvbnMsIHBDb21tb25DbGFzc0ZhY3RvcnkpOw0KICAg ICBpZihTVUNDRUVERUQocmV0VmFsKSkNCiAgICAgew0KICAgICAgICAgcmV0VmFsID0gcE9wdGlv bnMtPlNldFByb3BlcnR5VUxPTkczMihTWU5DSFJPTk9VU19PUFRJT05fTkFNRSwgZ19iVXNlRFRE cml2ZXJTeW5jaHJvbm91c01vZGUgPyAxIDogMCk7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VF REVEKHJldFZhbCkpDQogICAgIHsNCiAgICAgICAgIC8vIHN1cHByZXNzIHBhY2tldCBwcm9jZXNz aW5nIGluIHB1cmUgZXh0cmFjdGlvbiBtb2RlDQogICAgICAgICBpZihzdHJPdXRwdXRGaWxlTmFt ZS5Jc0VtcHR5KCkgJiYgIW1ldGFQcm9jZXNzb3JWYXJzLkdlbmVyYXRlSGFzaCkNCiAgICAgICAg IHsNCiAgICAgICAgICAgICByZXRWYWwgPSBwT3B0aW9ucy0+U2V0UHJvcGVydHlVTE9ORzMyKFRJ TUVSX09QVElPTl9OQU1FLCAwKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICBpZihTVUND RUVERUQocmV0VmFsKSkNCiAgICAgew0KICAgICAgICAgcmV0VmFsID0gcE9wdGlvbnMtPlNldFBy b3BlcnR5VUxPTkczMihCTEFTVEZJTEVfT1BUSU9OX05BTUUsIGJPdmVyd3JpdGVGaWxlID8gMSA6 IDApOw0KICAgICB9DQogDQogICAgIGlmKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7DQogICAg ICAgICByZXRWYWwgPSBwT3B0aW9ucy0+U2V0UHJvcGVydHlVTE9ORzMyKERJU0FCTEVQUk9HUkVT U0lWRURPV05MT0FEX09QVElPTl9OQU1FLCBiRGlzYWJsZVByb2dyZXNzaXZlRG93bmxvYWQgPyAx IDogMCk7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VFREVEKHJldFZhbCkpDQogICAgIHsNCisg ICAgICAgIHJldFZhbCA9IHBPcHRpb25zLT5TZXRQcm9wZXJ0eVVMT05HMzIoRk9SQ0VNT09WRklS U1RfT1BUSU9OX05BTUUsIGJNaW5GaWxlU2l6ZSA/IDEgOiAwKTsNCisgICAgfQ0KKw0KKyAgICBp ZihTVUNDRUVERUQocmV0VmFsKSkNCisgICAgew0KICAgICAgICAgcmV0VmFsID0gcE9wdGlvbnMt PlNldFByb3BlcnR5VUxPTkczMihVVEYxNk9VVFBVVF9PUFRJT05fTkFNRSwgYlVURjE2T3V0cHV0 ID8gMSA6IDApOw0KICAgICB9DQogDQogICAgIGlmKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7 DQogICAgICAgICAvLyBOb3RpZnkgd3JpdGVyIGFib3V0IHRoZSB2ZXJzaW9uIG9mIElEMyB0YWcg aXQgc2hvdWxkIG91dHB1dC4NCiAgICAgICAgIHJldFZhbCA9IHBPcHRpb25zLT5TZXRQcm9wZXJ0 eVVMT05HMzIoTUVUQURBVEFJRDNWRVJTSU9OX09QVElPTl9OQU1FLCB1bE1ldGFEYXRhSUQzVmVy c2lvbk91dHB1dCk7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VFREVEKHJldFZhbCkpDQogICAg IHsNCiAgICAgICAgIC8vIE5vdGlmeSB3cml0ZXIgd2hldGhlciB0byB1c2UgbGVnYWN5IGxvY2F0 aW9uIGZvciBVSVRTIGRhdGEuDQogICAgICAgICByZXRWYWwgPSBwT3B0aW9ucy0+U2V0UHJvcGVy dHlVTE9ORzMyKE1FVEFEQVRBVUlUU0xPQ0FUSU9OX09QVElPTl9OQU1FLCB1bE1ldGFEYXRhVUlU U0xvY2F0aW9uKTsNCiAgICAgfQ0KIA0KICAgICBpZihTVUNDRUVERUQocmV0VmFsKSkNCiAgICAg ew0KICAgICAgICAgLy8gTm90aWZ5IG1ldGEtZWRpdG9yIGFib3V0IHRoZSBmbGF2b3Igb2YgbWV0 YS1kYXRhIGl0IHNob3VsZCBwcm9jZXNzLg0KICAgICAgICAgcmV0VmFsID0gcE9wdGlvbnMtPlNl dFByb3BlcnR5VUxPTkczMihNRVRBREFUQUZMQVZPUl9PUFRJT05fTkFNRSwgbWV0YVByb2Nlc3Nv clZhcnMuSW5qZWN0ZWRNZXRhRmxhdm9ycyk7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VFREVE KHJldFZhbCkpDQogICAgIHsNCiAgICAgICAgIC8vIExlZ2FjeSBJRDMyX0JMT0IgcHJvcGVydHkg bXVzdCBub3QgZ2V0IGluIHRoZSB3YXkgb2YgbmV3bHkgZGVmaW5lZCBwcm9wZXJ0aWVzLg0KICAg ICAgICAgLy8gVGVsbCBmaWxlLXdyaXRlciB0byBpZ25vcmUgaXQuDQogICAgICAgICByZXRWYWwg PSBwT3B0aW9ucy0+U2V0UHJvcGVydHlVTE9ORzMyKE1FVEFEQVRBSUdOT1JFX09QVElPTl9OQU1F LCBNRVRBREFUQUlHTk9SRV9JRDMyQkxPQik7DQogICAgIH0NCiANCiAgICAgaWYoU1VDQ0VFREVE KHJldFZhbCkpDQogICAgIHsNCg== --14dae9cdc0d5b21b3704b05e1fbd Content-Type: application/octet-stream; name="datatype_tools_dtdriver_engine.diff" Content-Disposition: attachment; filename="datatype_tools_dtdriver_engine.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gubdnxgf1 SW5kZXg6IGZmZHJpdmVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L2RhdGF0 eXBlL3Rvb2xzL2R0ZHJpdmVyL2VuZ2luZS9mZmRyaXZlci5jcHAsdg0KcmV0cmlldmluZyByZXZp c2lvbiAxLjY0LjIuMg0KZGlmZiAtVSAzMCAtdyAtZCAtSCAtcjEuNjQuMi4yIGZmZHJpdmVyLmNw cA0KLS0tIGZmZHJpdmVyLmNwcAk0IE5vdiAyMDEwIDEzOjI1OjMxIC0wMDAwCTEuNjQuMi4yDQor KysgZmZkcml2ZXIuY3BwCTI4IE9jdCAyMDExIDE1OjExOjEwIC0wMDAwDQpAQCAtNTI3LDYwICs1 MjcsNjQgQEANCiAgICAgICAgICAgICAgICAgdU9wdEZsYWcgPSBMRUFLREVUQUlMU19PUFRJT047 DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwg TUVNT1JZREVUQUlMU19PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgIHVPcHRGbGFnID0gTUVNT1JZREVUQUlMU19PUFRJT047DQogICAgICAgICAgICAg fQ0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwgRVZFTlRfT1BUSU9OX05B TUUpID09IDApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB1T3B0RmxhZyA9IEVW RU5UX09QVElPTjsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21w KHBPcHROYW1lLCBEVVJBVElPTl9PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgIHVPcHRGbGFnID0gRFVSQVRJT05fT1BUSU9OOw0KICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAocE9wdE5hbWUsIFBSRVJPTExfT1BUSU9O X05BTUUpID09IDApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB1T3B0RmxhZyA9 IFBSRVJPTExfT1BUSU9OOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIGlmIChz dHJjbXAocE9wdE5hbWUsIEJMQVNURklMRV9PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgIHVPcHRGbGFnID0gQkxBU1RGSUxFX09QVElPTjsNCiAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKHBPcHROYW1lLCBESVNBQkxF UFJPR1JFU1NJVkVET1dOTE9BRF9PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgIHVPcHRGbGFnID0gUERPV05MT0FERF9PUFRJT047DQogICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwgVVRGMTZPVVRQVVRf T1BUSU9OX05BTUUpID09IDApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB1T3B0 RmxhZyA9IFVURjE2T1VUUFVUX09QVElPTjsNCiAgICAgICAgICAgICB9DQorICAgICAgICAgICAg ZWxzZSBpZiAoc3RyY21wKHBPcHROYW1lLCBGT1JDRU1PT1ZGSVJTVF9PUFRJT05fTkFNRSkgPT0g MCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHVPcHRGbGFnID0gRk9SQ0VNT09W RklSU1RfT1BUSU9OOw0KKyAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIGlmIChzdHJj bXAocE9wdE5hbWUsIFNZTkNIUk9OT1VTX09QVElPTl9OQU1FKSA9PSAwKQ0KICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgdU9wdEZsYWcgPSBTWU5DSFJPTk9VU19PUFRJT047DQogICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwgUkVMQVRJ VkVUU19PUFRJT05fTkFNRSkgPT0gMCkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg IHVPcHRGbGFnID0gUkVMQVRJVkVUU19PUFRJT047DQogICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgIGVsc2UgaWYgKHN0cmNtcChwT3B0TmFtZSwgVElNSU5HX09QVElPTl9OQU1FKSA9PSAwKQ0K ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgdU9wdEZsYWcgPSBUSU1JTkdfT1BUSU9O Ow0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAocE9wdE5hbWUs IFBBU1NTV09GRlBLVFNfT1BUSU9OX05BTUUpID09IDApDQogICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICB1T3B0RmxhZyA9IFBBU1NTV09GRlBLVFNfT1BUSU9OOw0KICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAocE9wdE5hbWUsIFFVSUVUX09QVElPTl9O QU1FKSA9PSAwKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgdU9wdEZsYWcgPSBR VUlFVF9PUFRJT047DQogICAgICAgICAgICAgfSAgICAgICAgICANCiAgICAgICAgICAgICBlbHNl DQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICBiSXNGbGFnT3B0aW9uID0gRkFMU0U7 DQogICAgICAgICAgICAgfQ0KIA0KICAgICAgICAgICAgIGlmIChiSXNGbGFnT3B0aW9uKQ0KICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgaWYgKHVPcHRWYWx1ZSA9PSBUUlVFKQ0KICAg ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICBtX3VPcHRpb25GbGFncyB8PSB1 T3B0RmxhZzsNCkBAIC0yMDYyLDYwICsyMDY2LDY4IEBADQogICAgICAgICAgICAgcmV0VmFsID0g cE5ld1Byb3BzLT5TZXRQcm9wZXJ0eVVMT05HMzIoIlRydXN0R2l2ZW5NZWRpYVByb3BlcnRpZXMi LCAwKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICBpZiAoU1VDQ0VFREVEKHJldFZhbCkp DQogICAgIHsNCiAgICAgICAgIGlmIChtX3VPcHRpb25GbGFncyAmIFBSRVJPTExfT1BUSU9OKQ0K ICAgICAgICAgew0KICAgICAgICAgICAgIHJldFZhbCA9IHBOZXdQcm9wcy0+U2V0UHJvcGVydHlV TE9ORzMyKCJSZWNvbXB1dGVQcmVyb2xsIiwgMSk7DQogICAgICAgICB9DQogICAgIH0NCiANCiAg ICAgaWYgKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7DQogICAgICAgICBpZiAobV91T3B0aW9u RmxhZ3MgJiBCTEFTVEZJTEVfT1BUSU9OKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIHJldFZh bCA9IHBOZXdQcm9wcy0+U2V0UHJvcGVydHlVTE9ORzMyKCJCbGFzdEZpbGVzIiwgMSk7DQogICAg ICAgICB9DQogICAgIH0NCiANCiAgICAgaWYgKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7DQog ICAgICAgICBpZiAobV91T3B0aW9uRmxhZ3MgJiBVVEYxNk9VVFBVVF9PUFRJT04pDQogICAgICAg ICB7DQogICAgICAgICAgICAgcmV0VmFsID0gcE5ld1Byb3BzLT5TZXRQcm9wZXJ0eVVMT05HMzIo IlVURjE2T3V0cHV0IiwgMSk7DQogICAgICAgICB9DQogICAgIH0NCiANCiAgICAgaWYgKFNVQ0NF RURFRChyZXRWYWwpKQ0KICAgICB7DQorICAgICAgICBpZiAobV91T3B0aW9uRmxhZ3MgJiBGT1JD RU1PT1ZGSVJTVF9PUFRJT04pDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0VmFsID0gcE5l d1Byb3BzLT5TZXRQcm9wZXJ0eVVMT05HMzIoRk9SQ0VNT09WRklSU1RfT1BUSU9OX05BTUUsIDEp Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChTVUNDRUVERUQocmV0VmFsKSkNCisg ICAgew0KICAgICAgICAgaWYgKG1fdWxNZXRhRGF0YUZsYXZvciAhPSAwKQ0KICAgICAgICAgew0K ICAgICAgICAgICAgIHJldFZhbCA9IHBOZXdQcm9wcy0+U2V0UHJvcGVydHlVTE9ORzMyKE1FVEFE QVRBRkxBVk9SX09QVElPTl9OQU1FLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bV91bE1ldGFEYXRhRmxhdm9yKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICBpZiAoU1VD Q0VFREVEKHJldFZhbCkpDQogICAgIHsNCiAgICAgICAgIGlmIChtX3VsTWV0YURhdGFJZ25vcmUg IT0gMCkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICByZXRWYWwgPSBwTmV3UHJvcHMtPlNldFBy b3BlcnR5VUxPTkczMihNRVRBREFUQUlHTk9SRV9PUFRJT05fTkFNRSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1fdWxNZXRhRGF0YUlnbm9yZSk7DQogICAgICAgICB9DQogICAg IH0NCiANCiAgICAgaWYgKFNVQ0NFRURFRChyZXRWYWwpKQ0KICAgICB7DQogICAgICAgICBpZiAo bV91bE1ldGFEYXRhSUQzVmVyc2lvbiAhPSAwKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIHJl dFZhbCA9IHBOZXdQcm9wcy0+U2V0UHJvcGVydHlVTE9ORzMyKE1FVEFEQVRBSUQzVkVSU0lPTl9P UFRJT05fTkFNRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdWxNZXRhRGF0 YUlEM1ZlcnNpb24pOw0KICAgICAgICAgfQ0KICAgICB9DQogDQogICAgIGlmIChTVUNDRUVERUQo cmV0VmFsKSkNCiAgICAgew0KICAgICAgICAgaWYgKG1fdWxNZXRhRGF0YVVJVFNMb2NhdGlvbiAh PSAwKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIHJldFZhbCA9IHBOZXdQcm9wcy0+U2V0UHJv cGVydHlVTE9ORzMyKE1FVEFEQVRBVUlUU0xPQ0FUSU9OX09QVElPTl9OQU1FLA0KSW5kZXg6IHB1 Yi9mZmRyaXZlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvZGF0YXR5cGUvdG9v bHMvZHRkcml2ZXIvZW5naW5lL3B1Yi9mZmRyaXZlci5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g MS40Ny4yLjINCmRpZmYgLVUgMzAgLXcgLWQgLUggLXIxLjQ3LjIuMiBmZmRyaXZlci5oDQotLS0g cHViL2ZmZHJpdmVyLmgJNCBOb3YgMjAxMCAxMzoyNTozMSAtMDAwMAkxLjQ3LjIuMg0KKysrIHB1 Yi9mZmRyaXZlci5oCTI4IE9jdCAyMDExIDE1OjExOjExIC0wMDAwDQpAQCAtOTAsNjAgKzkwLDYx IEBADQogI2RlZmluZSBLRVlGUkFNRVNPTkxZX09QVElPTl9OQU1FICAgIktleUZyYW1lc09ubHki DQogI2RlZmluZSBNQVhGUkFNRVJBVEVfT1BUSU9OX05BTUUgICAgIk1heEZyYW1lUmF0ZSINCiAj ZGVmaW5lIE1JTkZSQU1FUkFURV9PUFRJT05fTkFNRSAgICAiTWluRnJhbWVSYXRlIg0KICNkZWZp bmUgTE9PS0FIRUFEX09QVElPTl9OQU1FICAgICAgICJMb29rQWhlYWQiDQogI2RlZmluZSBSRUxB VElWRVRTX09QVElPTl9OQU1FCSAgICAiUmVsYXRpdmVUUyINCiAjZGVmaW5lIERFQ1JZUFRfT1BU SU9OX05BTUUJICAgICJEZWNyeXB0U291cmNlIg0KICNkZWZpbmUgREVDT0RFX09QVElPTl9OQU1F CSAgICAiRGVjb2RlU291cmNlIg0KICNkZWZpbmUgREVDT0RFQVVESU9fT1BUSU9OX05BTUUJICAg ICJEZWNvZGVBdWRpbyINCiAjZGVmaW5lIERFQ09ERVZJREVPX09QVElPTl9OQU1FCSAgICAiRGVj b2RlVmlkZW8iDQogI2RlZmluZSBERUNPREVOT05BVl9PUFRJT05fTkFNRQkgICAgIkRlY29kZU5v bkFWIg0KICNkZWZpbmUgREVDT0RFU1RSRUFNX09QVElPTl9OQU1FICAgICJEZWNvZGVTdHJlYW0i DQogI2RlZmluZSBERUNPREVTVFJFQU1NT0RFX09QVElPTl9OQU1FCSJEZWNvZGVTdHJlYW1Nb2Rl Ig0KICNkZWZpbmUgT1VUUFVUU0FNUExFU1BFUlNFQ09ORF9PUFRJT05fTkFNRSAgIk91dHB1dFNh bXBsZXNQZXJTZWNvbmQiDQogI2RlZmluZSBPVVRQVVRDSEFOTkVMU19PUFRJT05fTkFNRQkgICAg Ik91dHB1dENoYW5uZWxzIg0KICNkZWZpbmUgT1VUUFVUQklUU1BFUlNBTVBMRV9PUFRJT05fTkFN RQkgICAgIk91dHB1dEJpdHNQZXJTYW1wbGUiCQ0KICNkZWZpbmUgTUlOT1VUUFVUQklUU1BFUlNB TVBMRV9PUFRJT05fTkFNRSAgIk1pbk91dHB1dEJpdHNQZXJTYW1wbGUiCQ0KICNkZWZpbmUgTUFY T1VUUFVUQklUU1BFUlNBTVBMRV9PUFRJT05fTkFNRSAgIk1heE91dHB1dEJpdHNQZXJTYW1wbGUi CQ0KICNkZWZpbmUgRU5DT0RFX09QVElPTl9OQU1FCSAgICAiRW5jb2RlU291cmNlIg0KICNkZWZp bmUgRU5DT0RFQVVESU9fT1BUSU9OX05BTUUJICAgICJFbmNvZGVBdWRpb0Zvcm1hdCINCiAjZGVm aW5lIEVOQ09ERVZJREVPX09QVElPTl9OQU1FCSAgICAiRW5jb2RlVmlkZW9Gb3JtYXQiDQogI2Rl ZmluZSBFTkNPREVBVURJT1JBVEVfT1BUSU9OX05BTUUgIkVuY29kZUF1ZGlvUmF0ZSINCiAjZGVm aW5lIEVOQ09ERUFVRElPUkFURVRPTF9PUFRJT05fTkFNRSAiRW5jb2RlQXVkaW9SYXRlVG9sIg0K ICNkZWZpbmUgRU5DT0RFQVVESU9SQVRFTUFYX09QVElPTl9OQU1FICJFbmNvZGVBdWRpb1JhdGVN YXgiDQogI2RlZmluZSBFTkNPREVBVURJT1JBVEVDT01QRk1UU19PUFRJT05fTkFNRSAiRW5jb2Rl QXVkaW9Db21wRm9ybWF0cyINCiAjZGVmaW5lIEVOQ09ERUFVRElPUkFURUlMRUFWRUZNVF9PUFRJ T05fTkFNRSAiRW5jb2RlQXVkaW9JbGVhdmVGb3JtYXQiDQogI2RlZmluZSBFTkNPREVBVURJT1JB VEVJTEVBVkVDT01QRk1UU19PUFRJT05fTkFNRSAiRW5jb2RlQXVkaW9JTGVhdmVDb21wRm9ybWF0 cyINCiAjZGVmaW5lIE1VWF9PUFRJT05fTkFNRSAgICJNdXhBdWRpb1ZpZGVvIg0KICNkZWZpbmUg RU5DT0RFRlJPTVVSTF9PUFRJT05fTkFNRSAgICJFbmNvZGVGcm9tVVJMIg0KICNkZWZpbmUgRU5D T0RFTEVHQUNZQVBJX09QVElPTl9OQU1FICAgIkVuY29kZUxlZ2FjeUFQSSINCiAjZGVmaW5lIERJ U0FCTEVQUk9HUkVTU0lWRURPV05MT0FEX09QVElPTl9OQU1FICJEaXNhYmxlUHJvZ3Jlc3NpdmVE b3dubG9hZCINCisjZGVmaW5lIEZPUkNFTU9PVkZJUlNUX09QVElPTl9OQU1FICJGb3JjZU1vb3ZG aXJzdCINCiANCiAjZGVmaW5lIEVOQ09ERVZJREVPUkFURV9PUFRJT05fTkFNRSAiRW5jb2RlVmlk ZW9SYXRlIg0KICNkZWZpbmUgRU5DT0RFVklERU9SQVRFTUFYX09QVElPTl9OQU1FICJFbmNvZGVW aWRlb1JhdGVNYXgiDQogI2RlZmluZSBFTkNPREVWSURFT0ZSQU1FUkFURU1FVEhPRF9PUFRJT05f TkFNRSAiRW5jb2RlVmlkZW9GcmFtZVJhdGUiDQogI2RlZmluZSBFTkNPREVWSURFT1dJRFRIX09Q VElPTl9OQU1FICJFbmNvZGVWaWRlb1dpZHRoIg0KICNkZWZpbmUgRU5DT0RFVklERU9IRUlHSFRf T1BUSU9OX05BTUUgIkVuY29kZVZpZGVvSGVpZ2h0Ig0KICNkZWZpbmUgRU5DT0RFVklERU9BU1BF Q1RSQVRJT19PUFRJT05fTkFNRSAiRW5jb2RlVmlkZW9QcmVzZXJ2ZUFzcGVjdFJhdGlvIg0KICNk ZWZpbmUgRU5DT0RFVklERU9BU1BFQ1RSQVRJT01FVEhPRF9PUFRJT05fTkFNRSAiRW5jb2RlVmlk ZW9QcmVzZXJ2ZUFzcGVjdFJhdGlvTWV0aG9kIg0KICNkZWZpbmUgQkxPQ0tfT1BUSU9OX05BTUUJ ICAgICJCbG9ja0ZpbHRlciINCiAjZGVmaW5lIEJMT0NLVklERU9fT1BUSU9OX05BTUUJICAgICJC bG9ja1ZpZGVvIg0KICNkZWZpbmUgQkxPQ0tBVURJT19PUFRJT05fTkFNRQkgICAgIkJsb2NrQXVk aW8iDQogI2RlZmluZSBCTE9DS05PTkFWX09QVElPTl9OQU1FCSAgICAiQmxvY2tOb25BViINCiAj ZGVmaW5lIFBBU1NUSFJPVUdIREVDX09QVElPTl9OQU1FICAiUGFzc1Rocm91Z2hEZWNvZGUiDQog I2RlZmluZSBNQVhTUEVFRF9PUFRJT05fTkFNRQkgICAgIk1heFNwZWVkIg0KICNkZWZpbmUgUFJP Q0VTU0hFQURFUlNfT1BUSU9OX05BTUUgICJQcm9jZXNzSGVhZGVyc09ubHkiDQogI2RlZmluZSBT RVRTUkNQUk9QX09QVElPTl9OQU1FICAgICAgIlNldFNyY1Byb3BlcnRpZXMiDQogI2RlZmluZSBP UFRJTUlaRURUUkFOU0NPREVfT1BUSU9OX05BTUUgICAgICAiT3B0aW1pemVkVHJhbnNjb2RlIg0K ICNkZWZpbmUgRklMRVJFQ09HTklUSU9OX09QVElPTl9OQU1FICAiVXNlRmlsZVJlY29nbml0aW9u Ig0KICNkZWZpbmUgQ09MT1JDT05WRVJUX09QVElPTl9OQU1FCSJDb2xvckNvbnZlcnQiDQogI2Rl ZmluZSBNQVhOVU1JTUFHRU9VVFBVVEZJTEVTX09QVElPTl9OQU1FCSJNYXhpbXVtTnVtSW1hZ2VP dXRwdXRGaWxlcyINCiAjZGVmaW5lIERFQ09ERURfVklERU9fUkVTSVpFX1dJRFRIX09QVElPTl9O QU1FCSJEZWNvZGVkVmlkZW9SZXNpemVXaWR0aCINCiAjZGVmaW5lIERFQ09ERURfVklERU9fUkVT SVpFX0hFSUdIVF9PUFRJT05fTkFNRQkiRGVjb2RlZFZpZGVvUmVzaXplSGVpZ2h0Ig0KICNkZWZp bmUgREVDT0RFRF9WSURFT19SRVNJWkVfUFJFU0VSVkVfQVNQRUNUX09QVElPTl9OQU1FICJEZWNv ZGVkVmlkZW9SZXNpemVQcmVzZXJ2ZUFzcGVjdCINCiAjZGVmaW5lIENPTVBBVElCSUxJVFlfT1BU SU9OX05BTUUgICAiQ29tcGF0aWJpbGl0eSINCiANCiAvLyBNZXJnZSBzb3J0ZXIgcmVsYXRlZCBv cHRpb25zDQogI2RlZmluZSBNRVJHRVNPUlRGRl9PUFRJT05fTkFNRSAgICAgICAiTWVyZ2VTb3J0 RmlsZUZvcm1hdCINCiAjZGVmaW5lIE1FUkdFU09SVERFQ19PUFRJT05fTkFNRSAgICAgICJNZXJn ZVNvcnREZWNvZGUiDQogI2RlZmluZSBNRVJHRVNPUlRFTkNfT1BUSU9OX05BTUUgICAgICAiTWVy Z2VTb3J0RW5jb2RlIg0KICNkZWZpbmUgTUVSR0VTT1JURkZERVBUSF9PUFRJT05fTkFNRSAgIk1l cmdlU29ydE1heFF1ZXVlRGVwdGhQb3N0RmlsZUZvcm1hdCINCkBAIC00MTMsNjEgKzQxNCw2MiBA QA0KIAl7DQogCSAgICA7DQogCX0NCiANCiAJVUlOVDMyIG1fZUlEOw0KIAlVSU5UMzIgbV91bFRp bWU7DQogICAgIH07DQogDQogcHJpdmF0ZToNCiANCiAgICAgZW51bSBEcml2ZXJPcHRpb25GbGFn DQogICAgIHsNCiAJTk9fT1BUSU9OICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwLA0KIAlNRU1P UllfT1BUSU9OICAgICAgICAgICA9IDB4MDAwMDAwMDEsDQogCUhFQURFUl9PUFRJT04gICAgICAg ICAgID0gMHgwMDAwMDAwMiwNCiAJUEFDS0VUX09QVElPTiAgICAgICAgICAgPSAweDAwMDAwMDA0 LA0KIAlWRVJCT1NFX09QVElPTiAgICAgICAgICA9IDB4MDAwMDAwMDgsDQogCUxFQUtBTkFMWVNJ U19PUFRJT04gICAgID0gMHgwMDAwMDAxMCwNCiAJTEVBS0RFVEFJTFNfT1BUSU9OICAgICAgPSAw eDAwMDAwMDIwLA0KIAlNRU1PUllERVRBSUxTX09QVElPTiAgICA9IDB4MDAwMDAwNDAsDQogCUVW RU5UX09QVElPTiAgICAgICAgICAgID0gMHgwMDAwMDA4MCwNCiAJRFVSQVRJT05fT1BUSU9OICAg ICAgICAgPSAweDAwMDAwMTAwLA0KIAlCTEFTVEZJTEVfT1BUSU9OICAgICAgICA9IDB4MDAwMDAy MDAsDQogCVBSRVJPTExfT1BUSU9OICAgICAgICAgID0gMHgwMDAwMDQwMCwNCiAJUkVMQVRJVkVU U19PUFRJT04gICAgICAgPSAweDAwMDAwODAwLA0KIAlUSU1JTkdfT1BUSU9OICAgICAgICAgICA9 IDB4MDAwMDEwMDAsDQogCVBBU1NTV09GRlBLVFNfT1BUSU9OICAgID0gMHgwMDAwMjAwMCwNCiAJ UVVJRVRfT1BUSU9OICAgICAgICAgICAgPSAweDAwMDA0MDAwLA0KIAlVVEYxNk9VVFBVVF9PUFRJ T04gICAgICA9IDB4MDAwMDgwMDAsDQogCVNZTkNIUk9OT1VTX09QVElPTiAgICAgID0gMHgwMDAx MDAwMCwNCi0JUERPV05MT0FERF9PUFRJT04gICAgICAgPSAweDAwMDIwMDAwDQorCVBET1dOTE9B RERfT1BUSU9OICAgICAgID0gMHgwMDAyMDAwMCwNCisJRk9SQ0VNT09WRklSU1RfT1BUSU9OICAg PSAweDAwMDQwMDAwDQogICAgIH07DQogDQogICAgIGNsYXNzIEdldFBhY2tldENhbGxiYWNrIDog cHVibGljIElIWENhbGxiYWNrDQogICAgIHsNCiAgICAgcHVibGljOg0KIAlHZXRQYWNrZXRDYWxs YmFjayhGRkRyaXZlciAqcEZGRHJpdmVyID0gTlVMTCwgSUhYRmlsZUZvcm1hdE9iamVjdCAqcEZp bGVGb3JtYXQgPSBOVUxMLCBVSU5UMTYgdVN0cmVhbSA9IDApOw0KIAl+R2V0UGFja2V0Q2FsbGJh Y2soKTsNCiANCiAJLyoNCiAJICogIElIWENhbGxiYWNrIG1ldGhvZHMNCiAJICovDQogCVNURE1F VEhPRChGdW5jKQkJKFRISVMpOw0KIAkgICAgDQogICAgICAgICAvKg0KIAkgKiAgSVVua25vd24g bWV0aG9kcw0KIAkgKi8NCiAJU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNlKQkoVEhJU18gUkVGSUlE IHJpaWQsIHZvaWQqKiBwcHZPYmopOw0KIAlTVERNRVRIT0RfKFVMT05HMzIsQWRkUmVmKQkoVEhJ Uyk7DQogCVNURE1FVEhPRF8oVUxPTkczMixSZWxlYXNlKQkoVEhJUyk7DQogDQogCS8qDQogCSAq ICBQdWJsaWMgbWV0aG9kcw0KIAkgKi8NCiAJdm9pZCBDbG9zZSh2b2lkKTsNCiAJdm9pZCBTZXRG aWxlRm9ybWF0KElIWEZpbGVGb3JtYXRPYmplY3QqIHBGaWxlRm9ybWF0KTsNCiANCiAJSUhYRmls ZUZvcm1hdE9iamVjdCogICBtX3BGaWxlRm9ybWF0Ow0KIAlDYWxsYmFja0hhbmRsZQkJbV9oQ0I7 DQogDQogICAgIHByaXZhdGU6DQo= --14dae9cdc0d5b21b3704b05e1fbd--