a:3:{s:4:"name";s:12:"blockreferer";s:4:"dirs";a:4:{i:0;s:12:"blockreferer";i:1;s:17:"blockreferer/l10n";i:2;s:20:"blockreferer/l10n/fr";i:3;s:25:"blockreferer/l10n/fr-utf8";}s:5:"files";a:6:{s:30:"blockreferer/l10n/fr/main.lang";s:5780:"O0Jsb2NrIGJ5IFJlZmVyZXIKQmxvY2FnZSBwYXIgUulm6XJlbnQKCjtTdGF0aXN0aWNzClN0YXRpc3RpcXVlcwoKO0Jsb2NrIGFueSB1bmRlc2lyYWJsZSByZWZlcmVycyB0byBhdm9pZCBhc3NvY2lhdGVkIHNwYW0KQmxvcXVlIHRvdXQgculm6XJlbnQgaW5k6XNpcmFibGUgYWZpbiBkJ+l2aXRlciBsZSBzcGFtIGFzc29jaekKCjtDb3VsZCBub3QgY3JlYXRlIEJsb2NrIGJ5IFJlZmVyZXIgZGVkaWNhdGVkIGZvbGRlcgpJbXBvc3NpYmxlIGRlIGNy6WVyIGxlIHLpcGVydG9pcmUgZOlkaekgcG91ciBCbG9jYWdlIHBhciBS6WbpcmVudAoKO1JlZmVyZXJzIGxpc3Qgd2FzIHN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQuIFlvdSBtYXkgbm93IGRlbGV0ZSB0YWJsZQpMYSBsaXN0ZSBkZXMgculm6XJlbnRzIGEg6XTpIGNvbnZlcnRpZSBhdmVjIHN1Y2Pocy4gVm91cyBwb3V2ZXogbWFpbnRlbmFudCBzdXBwcmltZXIgbGEgdGFibGUKCjtPcHRpb25zIHN1Y2Nlc3NmdWxseSBzYXZlZApPcHRpb25zIHNhdXbpZXMgYXZlYyBzdWNj6HMKCjtSZWZlcmVyIHN1Y2Nlc3NmdWxseSBzYXZlZApS6WbpcmVudCBzYXV26SBhdmVjIHN1Y2PocwoKO1doaXRlbGlzdCByZWZlcmVyIHN1Y2Nlc3NmdWxseSBzYXZlZApS6WbpcmVudCBhdXRob3Jpc+kgc2F1dukgYXZlYyBzdWNj6HMKCjtSZWZlcmVycyBzdWNjZXNzZnVsbHkgZGVsZXRlZApS6WbpcmVudHMgc3VwcHJpbelzIGF2ZWMgc3VjY+hzCgo7V2hpdGVsaXN0IHJlZmVyZXJzIHN1Y2Nlc3NmdWxseSBkZWxldGVkClLpZulyZW50cyBhdXRvcmlz6XMgc2F1dulzIGF2ZWMgc3VjY+hzCgo7T3B0aW9ucwpPcHRpb25zCgo7VXNlIHJlZ3VsYXIgZXhwcmVzc2lvbgpVdGlsaXNlciBkZXMgZXhwcmVzc2lvbnMgculndWxp6HJlcwoKO0ZvcndhcmQgdmlzaXRvciB0byBpdCdzIG93biByZWZlcmVyIGluc3RlYWQgb2YgYmxvY2tpbmcgaXQKUmVudm9pZSBsZSB2aXNpdGV1ciB2ZXJzIHNvbiBwcm9wcmUgculm6XJlbnQgYXUgbGlldSBkZSBsZSBibG9xdWVyCgo7TG9nIGJsb2NraW5nClNhdXZlciBsZSBqb3VybmFsIGRlcyBibG9jYWdlcwoKO1ZpZXcgbG9nClZvaXIgbGUgam91cm5hbAoKO1VzZSBwZXJzb25hbGl6ZWQgZXJyb3IgbWVzc2FnZQpVdGlsaXNlciB1biBtZXNzYWdlIGQnZXJyZXVyIHBlcnNvbmFsaXPpCgo7UGVyc29uYWxpemVkIGVycm9yIG1lc3NhZ2UgKEhUTUwpIDoKTWVzc2FnZSBkJ2VycmV1ciBwZXJzb25uYWxpc+kgKEhUTUwpIDoKCjtUZXh0IG9mIHRoZSAiQWNjZXNzIHRvIHRoZSBwYWdlIiBsaW5rIDoKVGV4dGUgZHUgbGllbiAiQWNj6WRlciDgIGxhIHBhZ2UiIDoKCjtBZGQgYSBuZXcgcmVmZXJlciB0byBibG9jawpBam91dGVyIHVuIG5vdXZlYXUgculm6XJlbnQg4CBibG9xdWVyCgo7QWRkIGEgbmV3IHJlZmVyZXIgdG8gYXV0aG9yaXplCkFqb3V0ZXIgdW4gbm91dmVhdSBy6WbpcmVudCDgIGF1dG9yaXNlcgoKO1JlZmVyZXIgdG8gYmxvY2sgOgpS6WbpcmVudCDgIGJsb3F1ZXIgOgoKO1JlZmVyZXIgdG8gYXV0aG9yaXplIDoKUulm6XJlbnQg4CBhdXRvcmlzZXIgOgoKO1NhdmUKU2F1dmVyCgo7QmxvY2tlZCByZWZlcmVyIGxpc3QKTGlzdGUgZGVzIHLpZulyZW50cyBibG9xdelzCgo7QXV0aG9yaXplZCByZWZlcmVyIGxpc3QgCkxpc3RlIGRlcyBy6WbpcmVudHMgYXV0b3Jpc+lzCgo7UmVmZXJlcgpS6WbpcmVudAoKO05vIHJlZmVyZXIgaXMgYmxvY2tlZCBmb3Igbm93CkF1Y3VuIHLpZulyZW50IG4nZXN0IGJsb3F16SBwb3VyIGwnaW5zdGFudAoKO05vIHJlZmVyZXIgaXMgYXV0aG9yaXplZCBmb3Igbm93CkF1Y3VuIHLpZulyZW50IG4nZXN0IGF1dG9yaXPpIHBvdXIgbCdpbnN0YW50Cgo7RGVsZXRlClN1cHByaW1lcgoKO0luc3RhbGxhdGlvbgpJbnN0YWxsYXRpb24KCjtUbyB1c2UgcGx1Z2luLCBqdXN0IGFkZCBwYXJ0IG9mIHRoZSByZWZlcmVyIHlvdSB3YW50IHRvIGJsb2NrOyBpLmUgYWRkICJzb21lYnV6endvcmQiIHRvIGJsb2NrIGFueSByZWZlcmVyIHdoaWNoIGhhdmUgInNvbWVidXp6d29yZCIgaW4uClBvdXIgdXRpbGlzZXIgbGUgcGx1Z2luLCBham91dGVyIGp1c3RlIHVuZSBwYXJ0aWUgZHUgculm6XJlbnQgcXVlIHZvdXMgdm91bGV6IGJsb3F1ZXI7IHBhciBleGVtcGxlIGFqb3V0ZXogInNvbWVidXp6d29yZCIgcG91ciBibG9xdWVyIHRvdXQgculm6XJlbnQgY29udGVuYW50ICJzb21lYnV6endvcmQiLgoKO2lzIG5vdCBjaGVja2VkCm4nZXN0IHBhcyBjb2No6QoKO1lvdSBoYXZlIHRvIHVzZSBwYXJ0IG9mIHJlZmVyZXJzLCBvciB0aGVpciBmdWxsIGFkZHJlc3MuClZvdXMgZGV2ZXogdXRpbGlzZXIgdW5lIHBhcnRpZSBkZXMgculm6XJlbnQsIG91IGJpZW4gbGV1ciBhZHJlc3NlIGNvbXBs6HRlLgoKO2lzIGNoZWNrZWQKZXN0IGNvY2jpCgo7WW91IGhhdmUgdG8gdXNlIHJlZ3VsYXIgZXhwcmVzc2lvbiAoY2FzZSBpbnNlbnNpdGl2ZSkuClZvdXMgZGV2ZXogdXRpbGlzZXIgZGVzIGV4cHJlc3Npb25zIHLpZ3VsaehyZXMgKGluc2Vuc2libGVzIOAgbGEgY2Fzc2UpLgoKO0lmIHlvdSBtb2RpZnkgZGlmZmVyZW50IGZvcm1zIGF0IHRoZSBzYW1lIHRpbWUsIG9ubHkgdGhlIG9uZSB5b3UgY2hvc2UgdG8gc2F2ZSBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQuClNpIHZvdXMgbW9kaWZpZXogcGx1c2lldXJzIGZvcm11bGFpcmVzIGVuIG3qbWUgdGVtcHMsIHNldWwgY2VsdWkgcG91ciBsZXF1ZWwgdm91cyBhdXJleiBjaG9pc2kgZCdlbnJlZ2lzdHJlciBsZXMgY2hhbmdlbWVudHMgc2VyYSBzYXV26S4KCjtUaGUgYXV0aG9yaXphdGlvbiBoYXMgcHJpb3JpdHkgb24gYmxvY2tpbmcsIGFuZCBtYXkgdXNlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG9vLgpMJ2F1dG9yaXNhdGlvbiBlc3QgcHJpb3JpdGFpcmUgc3VyIGxlIGJsb2NhZ2UsIGV0IHBldXQgdXRpbGlzZXIgZGVzIGV4cHJlc3Npb25zCnLpZ3VsaehyZXMuCgo7SWYgeW91IHVwZ3JhZGUgZnJvbSB2ZXJzaW9uIDEuMCBvciAxLjEsIHlvdSB3aWxsIGhhdmUgdG8gY29udmVydCB0aGUgcmVmZXJlcnMgbGlzdCB0byB0aGUgbmV3IGZvcm1hdC4KU2kgdm91cyBtZXR0ZXog4CBqb3VyIGRlcHVpcyBsYSB2ZXJzaW9uIDEuMCBvdSAxLjEsIHZvdXMgZGV2ZXogY29udmVydGlyIHZvdHJlIGxpc3RlIGRlcyBy6WbpcmVudHMgYXUgbm91dmVhdSBmb3JtYXQuCgo7Q29udmVydApDb252ZXJ0aXIKCjtDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZQpJbXBvc3NpYmxlIGRlIGNy6WVyIGxlIGZpY2hpZXIgdGVtcG9yYWlyZQoKO0NvdWxkIG5vdCBjb3B5IHRlbXAgZmlsZQpJbXBvc3NpYmxlIGRlIGNvcGllciBsZSBmaWNoaWVyIHRlbXBvcmFpcmUKCjt0byBmaW5hbCBmaWxlCnZlcnMgbGUgZmljaGllciBmaW5hbAoKO0hlbHAKQWlkZQoKO0FsbCBibG9ja2luZ3MgOiBudW1iZXIgb2YgYmxvY2tlZCByZWZlcmVycyBzaW5jZSBiZWdpbm5pbmcgb2YgdGhlIGxvZy4KVG91cyBsZXMgYmxvY2FnZXMgOiBub21icmUgZGUgculm6XJlbnRzIGJsb3F16XMgZGVwdWlzIGxlIGTpYnV0IGRlIGxhIGpvdXJuYWxpc2F0aW9uLgoKO1llYXJseSA6IG51bWJlciBvZiBibG9ja2VkIHJlZmVyZXJzIHNpbmNlIGxhc3QgMzY1IGRheXMuCkFubnVlbGxlcyA6IG5vbWJyZSBkZSBy6WbpcmVudHMgYmxvcXXpcyBkYW5zIGxlcyBkZXJuaWVycyAzNjUgam91cnMuCgo7TW9udGhseSA6IG51bWJlciBvZiBibG9ja2VkIHJlZmVyZXJzIHNpbmNlIGxhc3QgMzAgZGF5cy4KTWVuc3VlbGxlcyA6IG5vbWJyZSBkZSBy6WbpcmVudHMgYmxvcXXpcyBkYW5zIGxlcyBkZXJuaWVycyAzMCBqb3Vycy4KCjtXZWVrbHkgOiBudW1iZXIgb2YgYmxvY2tlZCByZWZlcmVycyBzaW5jZSBsYXN0IDcgZGF5cy4KSGViZG9tYWRhaXJlcyA6IG5vbWJyZSBkZSBy6WbpcmVudHMgYmxvcXXpcyBkYW5zIGxlcyBkZXJuaWVycyA3IGpvdXJzLgoKO0RhaWx5IDogbnVtYmVyIG9mIGJsb2NrZWQgcmVmZXJlcnMgc2luY2UgbGFzdCAyNCBob3Vycy4KSm91cm5hbGnocmVzIDogbm9tYnJlIGRlIHLpZulyZW50cyBibG9xdelzIGRhbnMgbGVzIGRlcm5p6HJlcyAyNCBoZXVyZXMuCgo7VGltZSBzdGF0aXN0aWNzClN0YXRpc3RpcXVlcyB0ZW1wb3JlbGxlcwoKO0FsbCBibG9ja2luZ3MgOgpUb3VzIGxlcyBibG9jYWdlcyA6Cgo7WWVhcmx5IDoKQW5udWVsbGVzIDoKCjtNb250aGx5IDoKTWVuc3VlbGxlcyA6Cgo7V2Vla2x5IDoKSGViZG9tYWRhaXJlcyA6Cgo7RGFpbHkgOgpKb3VybmFsaehyZXMgOgoKO1JlZmVyZXJzIHN0YXRpc3RpY3MKU3RhdGlzdGlxdWVzIHBhciBy6WbpcmVudAoKO1JlZmVyZXIgaG9zdHMgc3RhdGlzdGljcwpTdGF0aXN0aXF1ZXMgcGFyIGj0dGUgZHUgculm6XJlbnQKCg==";s:35:"blockreferer/l10n/fr-utf8/main.lang";s:5932:"O0Jsb2NrIGJ5IFJlZmVyZXIKQmxvY2FnZSBwYXIgUsOpZsOpcmVudAoKO1N0YXRpc3RpY3MKU3RhdGlzdGlxdWVzCgo7QmxvY2sgYW55IHVuZGVzaXJhYmxlIHJlZmVyZXJzIHRvIGF2b2lkIGFzc29jaWF0ZWQgc3BhbQpCbG9xdWUgdG91dCByw6lmw6lyZW50IGluZMOpc2lyYWJsZSBhZmluIGQnw6l2aXRlciBsZSBzcGFtIGFzc29jacOpCgo7Q291bGQgbm90IGNyZWF0ZSBCbG9jayBieSBSZWZlcmVyIGRlZGljYXRlZCBmb2xkZXIKSW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgcsOpcGVydG9pcmUgZMOpZGnDqSBwb3VyIEJsb2NhZ2UgcGFyIFLDqWbDqXJlbnQKCjtSZWZlcmVycyBsaXN0IHdhcyBzdWNjZXNzZnVsbHkgY29udmVydGVkLiBZb3UgbWF5IG5vdyBkZWxldGUgdGFibGUKTGEgbGlzdGUgZGVzIHLDqWbDqXJlbnRzIGEgw6l0w6kgY29udmVydGllIGF2ZWMgc3VjY8Oocy4gVm91cyBwb3V2ZXogbWFpbnRlbmFudCBzdXBwcmltZXIgbGEgdGFibGUKCjtPcHRpb25zIHN1Y2Nlc3NmdWxseSBzYXZlZApPcHRpb25zIHNhdXbDqWVzIGF2ZWMgc3VjY8OocwoKO1JlZmVyZXIgc3VjY2Vzc2Z1bGx5IHNhdmVkClLDqWbDqXJlbnQgc2F1dsOpIGF2ZWMgc3VjY8OocwoKO1doaXRlbGlzdCByZWZlcmVyIHN1Y2Nlc3NmdWxseSBzYXZlZApSw6lmw6lyZW50IGF1dGhvcmlzw6kgc2F1dsOpIGF2ZWMgc3VjY8OocwoKO1JlZmVyZXJzIHN1Y2Nlc3NmdWxseSBkZWxldGVkClLDqWbDqXJlbnRzIHN1cHByaW3DqXMgYXZlYyBzdWNjw6hzCgo7V2hpdGVsaXN0IHJlZmVyZXJzIHN1Y2Nlc3NmdWxseSBkZWxldGVkClLDqWbDqXJlbnRzIGF1dG9yaXPDqXMgc2F1dsOpcyBhdmVjIHN1Y2PDqHMKCjtPcHRpb25zCk9wdGlvbnMKCjtVc2UgcmVndWxhciBleHByZXNzaW9uClV0aWxpc2VyIGRlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXMKCjtGb3J3YXJkIHZpc2l0b3IgdG8gaXQncyBvd24gcmVmZXJlciBpbnN0ZWFkIG9mIGJsb2NraW5nIGl0ClJlbnZvaWUgbGUgdmlzaXRldXIgdmVycyBzb24gcHJvcHJlIHLDqWbDqXJlbnQgYXUgbGlldSBkZSBsZSBibG9xdWVyCgo7TG9nIGJsb2NraW5nClNhdXZlciBsZSBqb3VybmFsIGRlcyBibG9jYWdlcwoKO1ZpZXcgbG9nClZvaXIgbGUgam91cm5hbAoKO1VzZSBwZXJzb25hbGl6ZWQgZXJyb3IgbWVzc2FnZQpVdGlsaXNlciB1biBtZXNzYWdlIGQnZXJyZXVyIHBlcnNvbmFsaXPDqQoKO1BlcnNvbmFsaXplZCBlcnJvciBtZXNzYWdlIChIVE1MKSA6Ck1lc3NhZ2UgZCdlcnJldXIgcGVyc29ubmFsaXPDqSAoSFRNTCkgOgoKO1RleHQgb2YgdGhlICJBY2Nlc3MgdG8gdGhlIHBhZ2UiIGxpbmsgOgpUZXh0ZSBkdSBsaWVuICJBY2PDqWRlciDDoCBsYSBwYWdlIiA6Cgo7QWRkIGEgbmV3IHJlZmVyZXIgdG8gYmxvY2sKQWpvdXRlciB1biBub3V2ZWF1IHLDqWbDqXJlbnQgw6AgYmxvcXVlcgoKO0FkZCBhIG5ldyByZWZlcmVyIHRvIGF1dGhvcml6ZQpBam91dGVyIHVuIG5vdXZlYXUgcsOpZsOpcmVudCDDoCBhdXRvcmlzZXIKCjtSZWZlcmVyIHRvIGJsb2NrIDoKUsOpZsOpcmVudCDDoCBibG9xdWVyIDoKCjtSZWZlcmVyIHRvIGF1dGhvcml6ZSA6ClLDqWbDqXJlbnQgw6AgYXV0b3Jpc2VyIDoKCjtTYXZlClNhdXZlcgoKO0Jsb2NrZWQgcmVmZXJlciBsaXN0Ckxpc3RlIGRlcyByw6lmw6lyZW50cyBibG9xdcOpcwoKO0F1dGhvcml6ZWQgcmVmZXJlciBsaXN0Ckxpc3RlIGRlcyByw6lmw6lyZW50cyBhdXRvcmlzw6lzCgo7UmVmZXJlcgpSw6lmw6lyZW50Cgo7Tm8gcmVmZXJlciBpcyBibG9ja2VkIGZvciBub3cKQXVjdW4gcsOpZsOpcmVudCBuJ2VzdCBibG9xdcOpIHBvdXIgbCdpbnN0YW50Cgo7Tm8gcmVmZXJlciBpcyBhdXRob3JpemVkIGZvciBub3cKQXVjdW4gcsOpZsOpcmVudCBuJ2VzdCBhdXRvcmlzw6kgcG91ciBsJ2luc3RhbnQKCjtEZWxldGUKU3VwcHJpbWVyCgo7SW5zdGFsbGF0aW9uCkluc3RhbGxhdGlvbgoKO1RvIHVzZSBwbHVnaW4sIGp1c3QgYWRkIHBhcnQgb2YgdGhlIHJlZmVyZXIgeW91IHdhbnQgdG8gYmxvY2s7IGkuZSBhZGQgInNvbWVidXp6d29yZCIgdG8gYmxvY2sgYW55IHJlZmVyZXIgd2hpY2ggaGF2ZSAic29tZWJ1enp3b3JkIiBpbi4KUG91ciB1dGlsaXNlciBsZSBwbHVnaW4sIGFqb3V0ZXIganVzdGUgdW5lIHBhcnRpZSBkdSByw6lmw6lyZW50IHF1ZSB2b3VzIHZvdWxleiBibG9xdWVyOyBwYXIgZXhlbXBsZSBham91dGV6ICJzb21lYnV6endvcmQiIHBvdXIgYmxvcXVlciB0b3V0IHLDqWbDqXJlbnQgY29udGVuYW50ICJzb21lYnV6endvcmQiLgoKO2lzIG5vdCBjaGVja2VkCm4nZXN0IHBhcyBjb2Now6kKCjtZb3UgaGF2ZSB0byB1c2UgcGFydCBvZiByZWZlcmVycywgb3IgdGhlaXIgZnVsbCBhZGRyZXNzLgpWb3VzIGRldmV6IHV0aWxpc2VyIHVuZSBwYXJ0aWUgZGVzIHLDqWbDqXJlbnQsIG91IGJpZW4gbGV1ciBhZHJlc3NlIGNvbXBsw6h0ZS4KCjtpcyBjaGVja2VkCmVzdCBjb2Now6kKCjtZb3UgaGF2ZSB0byB1c2UgcmVndWxhciBleHByZXNzaW9uIChjYXNlIGluc2Vuc2l0aXZlKS4KVm91cyBkZXZleiB1dGlsaXNlciBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIChpbnNlbnNpYmxlcyDDoCBsYSBjYXNzZSkuCgo7SWYgeW91IG1vZGlmeSBkaWZmZXJlbnQgZm9ybXMgYXQgdGhlIHNhbWUgdGltZSwgb25seSB0aGUgb25lIHlvdSBjaG9zZSB0byBzYXZlIGNoYW5nZXMgd2lsbCBiZSBzYXZlZC4KU2kgdm91cyBtb2RpZmlleiBwbHVzaWV1cnMgZm9ybXVsYWlyZXMgZW4gbcOqbWUgdGVtcHMsIHNldWwgY2VsdWkgcG91ciBsZXF1ZWwgdm91cyBhdXJleiBjaG9pc2kgZCdlbnJlZ2lzdHJlciBsZXMgY2hhbmdlbWVudHMgc2VyYSBzYXV2w6kuCgo7VGhlIGF1dGhvcml6YXRpb24gaGFzIHByaW9yaXR5IG9uIGJsb2NraW5nLCBhbmQgbWF5IHVzZSByZWd1bGFyIGV4cHJlc3Npb25zIHRvby4KTCdhdXRvcmlzYXRpb24gZXN0IHByaW9yaXRhaXJlIHN1ciBsZSBibG9jYWdlLCBldCBwZXV0IHV0aWxpc2VyIGRlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXMuCgo7SWYgeW91IHVwZ3JhZGUgZnJvbSB2ZXJzaW9uIDEuMCBvciAxLjEsIHlvdSB3aWxsIGhhdmUgdG8gY29udmVydCB0aGUgcmVmZXJlcnMgbGlzdCB0byB0aGUgbmV3IGZvcm1hdC4KU2kgdm91cyBtZXR0ZXogw6Agam91ciBkZXB1aXMgbGEgdmVyc2lvbiAxLjAgb3UgMS4xLCB2b3VzIGRldmV6IGNvbnZlcnRpciB2b3RyZSBsaXN0ZSBkZXMgcsOpZsOpcmVudHMgYXUgbm91dmVhdSBmb3JtYXQuCgo7Q29udmVydApDb252ZXJ0aXIKCjtDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZQpJbXBvc3NpYmxlIGRlIGNyw6llciBsZSBmaWNoaWVyIHRlbXBvcmFpcmUKCjtDb3VsZCBub3QgY29weSB0ZW1wIGZpbGUKSW1wb3NzaWJsZSBkZSBjb3BpZXIgbGUgZmljaGllciB0ZW1wb3JhaXJlCgo7dG8gZmluYWwgZmlsZQp2ZXJzIGxlIGZpY2hpZXIgZmluYWwKCjtIZWxwCkFpZGUKCjtBbGwgYmxvY2tpbmdzIDogbnVtYmVyIG9mIGJsb2NrZWQgcmVmZXJlcnMgc2luY2UgYmVnaW5uaW5nIG9mIHRoZSBsb2cuClRvdXMgbGVzIGJsb2NhZ2VzIDogbm9tYnJlIGRlIHLDqWbDqXJlbnRzIGJsb3F1w6lzIGRlcHVpcyBsZSBkw6lidXQgZGUgbGEgam91cm5hbGlzYXRpb24uCgo7WWVhcmx5IDogbnVtYmVyIG9mIGJsb2NrZWQgcmVmZXJlcnMgc2luY2UgbGFzdCAzNjUgZGF5cy4KQW5udWVsbGVzIDogbm9tYnJlIGRlIHLDqWbDqXJlbnRzIGJsb3F1w6lzIGRhbnMgbGVzIGRlcm5pZXJzIDM2NSBqb3Vycy4KCjtNb250aGx5IDogbnVtYmVyIG9mIGJsb2NrZWQgcmVmZXJlcnMgc2luY2UgbGFzdCAzMCBkYXlzLgpNZW5zdWVsbGVzIDogbm9tYnJlIGRlIHLDqWbDqXJlbnRzIGJsb3F1w6lzIGRhbnMgbGVzIGRlcm5pZXJzIDMwIGpvdXJzLgoKO1dlZWtseSA6IG51bWJlciBvZiBibG9ja2VkIHJlZmVyZXJzIHNpbmNlIGxhc3QgNyBkYXlzLgpIZWJkb21hZGFpcmVzIDogbm9tYnJlIGRlIHLDqWbDqXJlbnRzIGJsb3F1w6lzIGRhbnMgbGVzIGRlcm5pZXJzIDcgam91cnMuCgo7RGFpbHkgOiBudW1iZXIgb2YgYmxvY2tlZCByZWZlcmVycyBzaW5jZSBsYXN0IDI0IGhvdXJzLgpKb3VybmFsacOocmVzIDogbm9tYnJlIGRlIHLDqWbDqXJlbnRzIGJsb3F1w6lzIGRhbnMgbGVzIGRlcm5pw6hyZXMgMjQgaGV1cmVzLgoKO1RpbWUgc3RhdGlzdGljcwpTdGF0aXN0aXF1ZXMgdGVtcG9yZWxsZXMKCjtBbGwgYmxvY2tpbmdzIDoKVG91cyBsZXMgYmxvY2FnZXMgOgoKO1llYXJseSA6CkFubnVlbGxlcyA6Cgo7TW9udGhseSA6Ck1lbnN1ZWxsZXMgOgoKO1dlZWtseSA6CkhlYmRvbWFkYWlyZXMgOgoKO0RhaWx5IDoKSm91cm5hbGnDqHJlcyA6Cgo7UmVmZXJlcnMgc3RhdGlzdGljcwpTdGF0aXN0aXF1ZXMgcGFyIHLDqWbDqXJlbnQKCjtSZWZlcmVyIGhvc3RzIHN0YXRpc3RpY3MKU3RhdGlzdGlxdWVzIHBhciBow7R0ZSBkdSByw6lmw6lyZW50Cgo=";s:21:"blockreferer/icon.png";s:3164:"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";s:21:"blockreferer/desc.xml";s:328:"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8cGx1Z2luIG5hbWU9ImJsb2NrcmVmZXJlciIgdmVyc2lvbj0iMS45IiBhY3RpdmU9IjEiPgogIDxhdXRob3I+QXJuYXVkIEJvdWRvdTwvYXV0aG9yPgogIDxsYWJlbD5CbG9jayBieSBSZWZlcmVyPC9sYWJlbD4KICA8ZGVzYz5CbG9jayBhbnkgdW5kZXNpcmFibGUgcmVmZXJlcnMgdG8gYXZvaWQgYXNzb2NpYXRlZCBzcGFtPC9kZXNjPgo8L3BsdWdpbj4K";s:26:"blockreferer/functions.php";s:5116:"PD9waHAKJHJlZmVyZXJzT3B0aW9uc0ZpbGUgPSBEQ19TSEFSRV9ESVIuJy9ibG9ja3JlZmVyZXIvcmVmZXJlcnNfb3B0aW9ucy5waHAnOwokcmVmZXJlcnNMaXN0RmlsZSAgICA9IERDX1NIQVJFX0RJUi4nL2Jsb2NrcmVmZXJlci9yZWZlcmVycy50eHQnOwokd2hpdGVMaXN0RmlsZSAgICAgICA9IERDX1NIQVJFX0RJUi4nL2Jsb2NrcmVmZXJlci93aGl0ZWxpc3QudHh0JzsKJHJlZmVyZXJzTG9nRmlsZSAgICAgPSBEQ19TSEFSRV9ESVIuJy9ibG9ja3JlZmVyZXIvcmVmZXJlcnNfbG9nLmNzdic7CiRyZWZlcmVyc0xpc3RBcnJheSAgID0gYXJyYXkoKTsKJHdoaXRlTGlzdEFycmF5ICAgICAgPSBhcnJheSgpOwoKLyogTG9hZCBwcmVmcyBmaWxlICovCmlmIChmaWxlX2V4aXN0cygkcmVmZXJlcnNPcHRpb25zRmlsZSkpCiAgaW5jbHVkZSAkcmVmZXJlcnNPcHRpb25zRmlsZTsKCgppZiAoZmlsZV9leGlzdHMoJHdoaXRlTGlzdEZpbGUpKSB7CiAgLyogTG9hZCB3aGl0ZWxpc3QgKi8KICAkd2hpdGVMaXN0QXJyYXkgPSBmaWxlKCR3aGl0ZUxpc3RGaWxlKTsKICAkbG9vcCA9IDA7CiAgd2hpbGUgKCRsb29wIDwgY291bnQoJHdoaXRlTGlzdEFycmF5KSkgewogICAgJHdoaXRlTGlzdEFycmF5WyRsb29wXSA9IHRyaW0oJHdoaXRlTGlzdEFycmF5WyRsb29wXSk7CiAgICAkbG9vcCsrOwogIH0KfQoKaWYgKGZpbGVfZXhpc3RzKCRyZWZlcmVyc0xpc3RGaWxlKSkgewogIC8qIExvYWQgcmVmZXJlcnMgbGlzdCAqLwogICRyZWZlcmVyc0xpc3RBcnJheSA9IGZpbGUoJHJlZmVyZXJzTGlzdEZpbGUpOwogICRsb29wID0gMDsKICB3aGlsZSAoJGxvb3AgPCBjb3VudCgkcmVmZXJlcnNMaXN0QXJyYXkpKSB7CiAgICAkcmVmZXJlcnNMaXN0QXJyYXlbJGxvb3BdID0gdHJpbSgkcmVmZXJlcnNMaXN0QXJyYXlbJGxvb3BdKTsKICAgICRsb29wKys7CiAgfQoKICAvKiBJZiBhIHJlZmVyZXIgaXMgc2V0LCBhbmQgaXMgbm90IGEgcGFydCBvZiB0aGUgVVJMIG9mIHRoZSBibG9nICovCiAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSkgJiYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10sJzovLycuJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pID09ICIiKSkgewogICAgJGxvb3AgPSAwOwogICAgd2hpbGUgKCRsb29wIDwgY291bnQoJHJlZmVyZXJzTGlzdEFycmF5KSkgewogICAgICAvKiBJZiB0aGUgcmVmZXJlciBpcyBpbiB0aGUgbGlzdCAqLwogICAgICBpZiAoICghJG9wdF9yZWdleHAgJiYgJHJlZmVyZXJzTGlzdEFycmF5WyRsb29wXSAhPSAiIiAmJiBzdHJzdHIoc3RydG9sb3dlcigkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pLHN0cnRvbG93ZXIoJHJlZmVyZXJzTGlzdEFycmF5IFskbG9vcF0pKSkgfHwgKCRvcHRfcmVnZXhwICYmIGVyZWdpKCRyZWZlcmVyc0xpc3RBcnJheSBbJGxvb3BdLCAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pKSApIHsKICAgICAgICAvKiBXZSB0YWcgdGhlIHJlZmVyZXIgdG8gYmUgYmxvY2tlZCAqLwogICAgICAgICR0b19ibG9jayA9IHRydWU7CgogICAgICAgIGlmIChjb3VudCgkd2hpdGVMaXN0QXJyYXkpID4gMCkgewogICAgICAgICAgJHdoaXRlbG9vcCA9IDA7CiAgICAgICAgICB3aGlsZSAoJHdoaXRlbG9vcCA8IGNvdW50KCR3aGl0ZUxpc3RBcnJheSkpIHsKICAgICAgICAgICAgaWYgKCAoISRvcHRfcmVnZXhwICYmICR3aGl0ZUxpc3RBcnJheVskd2hpdGVsb29wXSAhPSAiIiAmJiBzdHJzdHIoc3RydG9sb3dlcigkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pLHN0cnRvbG93ZXIoJHdoaXRlTGlzdEFycmF5IFskd2hpdGVsb29wXSkpKSB8fCAoJG9wdF9yZWdleHAgJiYgZXJlZ2koJHdoaXRlTGlzdEFycmF5IFskd2hpdGVsb29wXSwgJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSkgKSB7CiAgICAgICAgICAgICAgJHRvX2Jsb2NrPWZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR3aGl0ZWxvb3ArKzsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkdG9fYmxvY2sgPT0gdHJ1ZSkgewogICAgICAgICAgaWYgKCRvcHRfZm9yd2FyZCkgewogICAgICAgICAgICAvKiBJZiBwbHVnaW4gaXMgc2V0IHRvIGZvcndhcmQgdGhlIHJlZmVyZXIgdG8gaXQncyBvd24gcmVmZXJlciAqLwogICAgICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOicuJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Jy5vcHRfY2hhcnNldCk7CiAgICAgICAgICAgIGhlYWRlcignSFRUUC8xLjAgNDAzIEZvcmJpZGRlbicpOwogICAgICAgICAgICBlY2hvICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPicuIlxuIjsKICAgICAgICAgICAgZWNobyAnPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJmciIgbGFuZz0iZnIiPicuIlxuIjsKICAgICAgICAgICAgZWNobyAnPGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Jy4kb3B0X2NoYXJzZXQuJyIgLz48L2hlYWQ+Jy4iXG4iOwogICAgICAgICAgICBlY2hvICc8Ym9keT4nOwogICAgICAgICAgICBpZiAoISRvcHRfbWVzc2FnZSkgewogICAgICAgICAgICAgIC8qIElmIHRoZSBwbHVnaW4gaXMgbm90IHNldCB0byB1c2UgYSBwZXJzb25hbGl6ZWQgZXJyb3IgbWVzc2FnZSAqLwogICAgICAgICAgICAgIGVjaG8gJzxoMT40MDMgRm9yYmlkZGVuPC9oMT4nLiJcbiI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIC8qIElmIHRoZSBwbHVnaW4gaXMgc2V0IHRvIHVzZSBhIHBlcnNvbmFsaXplZCBlcnJvciBtZXNzYWdlICovCiAgICAgICAgICAgICAgZWNobyAkb3B0X21lc3NhZ2VfdGV4dCAuICc8YnIvPjxici8+Jy4iXG4iOwogICAgICAgICAgICAgIGlmIChpc3NldCgkb3B0X2xpbmspICYmICRvcHRfbGluayAhPSAiIikgewogICAgICAgICAgICAgICAgZWNobyAnPGEgaHJlZj0iJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nIj4nLiRvcHRfbGluay4nPC9hPicuIlxuIjsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWNobyAnPGEgaHJlZj0iJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nIj5BY2Nlc3MgdG8gdGhlIHBhZ2U8L2E+Jy4iXG4iOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L2JvZHk+PC9odG1sPicuIlxuIjsKICAgICAgICAgIH0KICAgICAgICAgIC8qIElmIHBsdWdpbiBpcyBzZXQgdG8gbG9nIGJsb2NraW5nICovCiAgICAgICAgICBpZiAoaXNzZXQoJG9wdF9sb2cpICYmICRvcHRfbG9nICE9ICIiKSB7CiAgICAgICAgICAgIGlmICgkZnBvaW50ZXIgPSBmb3BlbigkcmVmZXJlcnNMb2dGaWxlLCAnYSsnKSkgewogICAgICAgICAgICAgIGZ3cml0ZSgkZnBvaW50ZXIsIHRpbWUoKS4nOycuZGF0ZSgiWS1tLWQgSDppOnMiLCB0aW1lKCkpLic7Jy4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4nOycuJF9TRVJWRVJbIlJFTU9URV9IT1NUIl0uJzsnLiRfU0VSVkVSWyJIVFRQX1JFRkVSRVIiXS4nOycuJHJlZmVyZXJzTGlzdEFycmF5WyRsb29wXS4iXG4iKTsKICAgICAgICAgICAgICBmY2xvc2UoJGZwb2ludGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KICAgICAgfQogICAgICAkbG9vcCsrOwogICAgfQogIH0KfQo/Pgo=";s:22:"blockreferer/index.php";s:24512:"PD9waHAKLyogdXNlZnVsbCB2YXJpYWJsZXMgKi8KJHJlZmVyZXJzT3B0aW9uc0ZpbGUgPSBEQ19TSEFSRV9ESVIuJy9ibG9ja3JlZmVyZXIvcmVmZXJlcnNfb3B0aW9ucy5waHAnOwokcmVmZXJlcnNMaXN0RmlsZSAgICA9IERDX1NIQVJFX0RJUi4nL2Jsb2NrcmVmZXJlci9yZWZlcmVycy50eHQnOwokd2hpdGVMaXN0RmlsZSAgICAgICA9IERDX1NIQVJFX0RJUi4nL2Jsb2NrcmVmZXJlci93aGl0ZWxpc3QudHh0JzsKJHJlZmVyZXJzTG9nRmlsZSAgICAgPSAnLi4vc2hhcmUvYmxvY2tyZWZlcmVyL3JlZmVyZXJzX2xvZy5jc3YnOwokcmVmZXJlcnNMaXN0QXJyYXkgICA9IGFycmF5KCk7CiR3aGl0ZUxpc3RBcnJheSAgID0gYXJyYXkoKTsKCmJ1ZmZlcjo6c3RyKCc8aDI+Jy5fXygnQmxvY2sgYnkgUmVmZXJlcicpLic8L2gyPicpOwoKYnVmZmVyOjpzdHIoJzxwPjxhIGhyZWY9InRvb2xzLnBocD9wPWJsb2NrcmVmZXJlciI+Q29uZmlndXJhdGlvbjwvYT4gLSAnKTsKYnVmZmVyOjpzdHIoJzxhIGhyZWY9InRvb2xzLnBocD9wPWJsb2NrcmVmZXJlciZwYWdlPXN0YXRpc3RpY3MiPicuX18oJ1N0YXRpc3RpY3MnKS4nPC9hPjwvcD4nKTsKCmlmICghaXNzZXQoJF9HRVRbJ3BhZ2UnXSkgfHwgJF9HRVRbJ3BhZ2UnXSAhPSAnc3RhdGlzdGljcycpIHsKICAvKioqKiogQ29uZmlndXJhdGlvbiBwYWdlICoqKioqLwoKICAvKiBJbml0IC0gQ3JlYXRlIHBsdWdpbiBkZWRpY2F0ZWQgZm9sZGVyICovCiAgaWYgKCFmaWxlX2V4aXN0cyhEQ19TSEFSRV9ESVIuJy9ibG9ja3JlZmVyZXIvJykpIHsKICAgIHVtYXNrKDAwMCk7CiAgICBpZiAoIW1rZGlyKERDX1NIQVJFX0RJUi4nL2Jsb2NrcmVmZXJlci8nLCAwNzc3KSkgewogICAgICBidWZmZXI6OnN0cignPGg0PicgLiBfXygnQ291bGQgbm90IGNyZWF0ZSBCbG9jayBieSBSZWZlcmVyIGRlZGljYXRlZCBmb2xkZXInKS4gJyAnIC4gRENfU0hBUkVfRElSLicvYmxvY2tyZWZlcmVyLycuICc8L2g0PicpOwogICAgfQogIH0KCiAgLyogSW5pdCAtIENvbnZlcnQgb2xkIGRhdGFiYXNlIHRvIHBsYWluIHRleHQgZmlsZSAqLwogIGlmIChpc3NldCgkX1BPU1RbJ2NvbnZlcnQnXSkgJiYgJF9QT1NUWydjb252ZXJ0J10gIT0gJycpIHsKICAgIGdsb2JhbCAkY29uOwogICAgaWYgKCEkcnMgPSAkY29uLT5zZWxlY3QoJ1NFTEVDVCByZWZlcmVyIEZST00gJy5EQl9QUkVGSVguJ2Jsb2NrcmVmZXJlcicpKSB7CiAgICAgIGJ1ZmZlcjo6c3RyKCc8aDQ+JyAuICRjb24tPmVycm9yKCkgLiAnPC9oND4nKTsKICAgIH0gZWxzZSB7CiAgICAgIHdoaWxlICgkcnMtPmZldGNoKCkpIHsKICAgICAgICBhcnJheV9wdXNoKCRyZWZlcmVyc0xpc3RBcnJheSwgJHJzLT5mKCdyZWZlcmVyJykpOwogICAgICB9CiAgICAgIHNvcnQoJHJlZmVyZXJzTGlzdEFycmF5KTsKICAgICAgaWYgKHNhdmVSZWZlcmVyTGlzdCgkcmVmZXJlcnNMaXN0QXJyYXkpKTsKICAgICAgICBidWZmZXI6OnN0cignPGg0PicgLiBfXygnUmVmZXJlcnMgbGlzdCB3YXMgc3VjY2Vzc2Z1bGx5IGNvbnZlcnRlZC4gWW91IG1heSBub3cgZGVsZXRlIHRhYmxlJykgLiAnICcgLiBEQl9QUkVGSVguJ2Jsb2NrcmVmZXJlcicgLiAnPC9oND4nKTsKICAgIH0KICB9CgogIC8qIEluaXQgLSBMb2FkIHJlZmVyZXJzIGxpc3QgKi8KICBpZiAoZmlsZV9leGlzdHMoJHJlZmVyZXJzTGlzdEZpbGUpKSB7CiAgICAkcmVmZXJlcnNMaXN0QXJyYXkgPSBmaWxlKCRyZWZlcmVyc0xpc3RGaWxlKTsKICAgICRsb29wID0gMDsKICAgIHdoaWxlICgkbG9vcCA8IGNvdW50KCRyZWZlcmVyc0xpc3RBcnJheSkpIHsKICAgICAgJHJlZmVyZXJzTGlzdEFycmF5WyRsb29wXSA9IHRyaW0oJHJlZmVyZXJzTGlzdEFycmF5WyRsb29wXSk7CiAgICAgICRsb29wKys7CiAgICB9CiAgfQoKICAvKiBJbml0IC0gTG9hZCB3aGl0ZWxpc3QgKi8KICBpZiAoZmlsZV9leGlzdHMoJHdoaXRlTGlzdEZpbGUpKSB7CiAgICAkd2hpdGVMaXN0QXJyYXkgPSBmaWxlKCR3aGl0ZUxpc3RGaWxlKTsKICAgICRsb29wID0gMDsKICAgIHdoaWxlICgkbG9vcCA8IGNvdW50KCR3aGl0ZUxpc3RBcnJheSkpIHsKICAgICAgJHdoaXRlTGlzdEFycmF5WyRsb29wXSA9IHRyaW0oJHdoaXRlTGlzdEFycmF5WyRsb29wXSk7CiAgICAgICRsb29wKys7CiAgICB9CiAgfQoKICAvKiBBY3Rpb24gLSBTYXZlIG9wdGlvbnMgKi8KICBpZiAoaXNzZXQoJF9QT1NUWydvcHRpb25zJ10pICYmICRfUE9TVFsnb3B0aW9ucyddICE9ICcnKSB7CiAgICBzYXZlT3B0aW9ucygkX1BPU1QpOyAKICB9CgogIC8qIEluaXQgLSBMb2FkIG9wdGlvbnMgZmlsZSAqLwogIGlmIChmaWxlX2V4aXN0cygkcmVmZXJlcnNPcHRpb25zRmlsZSkpCiAgICBpbmNsdWRlICRyZWZlcmVyc09wdGlvbnNGaWxlOwoKICAvKiBBY3Rpb24gLSBTYXZlIG5ldyByZWZlcmVyICovCiAgaWYgKGlzc2V0KCRfUE9TVFsncmVmZXJlciddKSAmJiAkX1BPU1RbJ3JlZmVyZXInXSAhPSAnJykgewogICAgYXJyYXlfcHVzaCgkcmVmZXJlcnNMaXN0QXJyYXksICRfUE9TVFsncmVmZXJlciddKTsKICAgIHNvcnQoJHJlZmVyZXJzTGlzdEFycmF5KTsKICAgIGlmIChzYXZlUmVmZXJlckxpc3QoJHJlZmVyZXJzTGlzdEFycmF5LCAkcmVmZXJlcnNMaXN0RmlsZSkpOwogICAgICBidWZmZXI6OnN0cignPGg0PicgLiBfXygnUmVmZXJlciBzdWNjZXNzZnVsbHkgc2F2ZWQnKSAuICc8L2g0PicpOwogIH0KCiAgLyogQWN0aW9uIC0gU2F2ZSBuZXcgd2hpdGVsaXN0IHJlZmVyZXIgKi8KICBpZiAoaXNzZXQoJF9QT1NUWyd3aGl0ZWxpc3QnXSkgJiYgJF9QT1NUWyd3aGl0ZWxpc3QnXSAhPSAnJykgewogICAgYXJyYXlfcHVzaCgkd2hpdGVMaXN0QXJyYXksICRfUE9TVFsnd2hpdGVsaXN0J10pOwogICAgc29ydCgkd2hpdGVMaXN0QXJyYXkpOwogICAgaWYgKHNhdmVSZWZlcmVyTGlzdCgkd2hpdGVMaXN0QXJyYXksICR3aGl0ZUxpc3RGaWxlKSk7CiAgICAgIGJ1ZmZlcjo6c3RyKCc8aDQ+JyAuIF9fKCdXaGl0ZWxpc3QgcmVmZXJlciBzdWNjZXNzZnVsbHkgc2F2ZWQnKSAuICc8L2g0PicpOwogIH0KCiAgLyogQWN0aW9uIC0gRGVsZXRlIG9sZCByZWZlcmVyICovCiAgaWYgKGlzc2V0KCRfUE9TVFsnZGVsZXRlJ10pICYmICRfUE9TVFsnZGVsZXRlJ10gIT0gJycpIHsKICAgICRwb3N0X2NvdW50ID0gY291bnQoJF9QT1NUKTsKICAgIGlmICgkcG9zdF9jb3VudCA+IDEpIHsKICAgICAgcmVzZXQoJF9QT1NUKTsKICAgICAgJGxvb3AgPSAwOwogICAgICB3aGlsZSAoJGxvb3AgPCAkcG9zdF9jb3VudCkgewogICAgICAgICRwb3N0a2V5ID0ga2V5KCRfUE9TVCk7CiAgICAgICAgaWYgKHN1YnN0cigkcG9zdGtleSwgMCwgNSkgPT0gJ3JlZmlkJykgewogICAgICAgICAgJHBvc3R2YWx1ZSA9IGN1cnJlbnQoJF9QT1NUKTsKICAgICAgICAgICRhcnJheUxvb3AgPSAwOwogICAgICAgICAgd2hpbGUoJGFycmF5TG9vcCA8IGNvdW50KCRyZWZlcmVyc0xpc3RBcnJheSkpIHsKICAgICAgICAgICAgaWYgKCRyZWZlcmVyc0xpc3RBcnJheVskYXJyYXlMb29wXSA9PSAkcG9zdHZhbHVlKSB7CiAgICAgICAgICAgICAgdW5zZXQoJHJlZmVyZXJzTGlzdEFycmF5WyRhcnJheUxvb3BdKTsKICAgICAgICAgICAgICAkcmVmZXJlcnNMaXN0QXJyYXkgPSBhcnJheV9tZXJnZSgkcmVmZXJlcnNMaXN0QXJyYXkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRhcnJheUxvb3ArKzsKICAgICAgICAgIH0gICAgICAgICAgCiAgICAgICAgfQogICAgICAgICRsb29wKys7CiAgICAgICAgbmV4dCgkX1BPU1QpOwogICAgICB9CiAgICAgIGlmIChzYXZlUmVmZXJlckxpc3QoJHJlZmVyZXJzTGlzdEFycmF5LCAkcmVmZXJlcnNMaXN0RmlsZSkpOwogICAgICAgIGJ1ZmZlcjo6c3RyKCc8aDQ+JyAuIF9fKCdSZWZlcmVycyBzdWNjZXNzZnVsbHkgZGVsZXRlZCcpIC4gJzwvaDQ+Jyk7CiAgICB9CiAgfQoKICAvKiBBY3Rpb24gLSBEZWxldGUgb2xkIHdoaXRlbGlzdCByZWZlcmVyICovCiAgaWYgKGlzc2V0KCRfUE9TVFsnZGVsZXRlX3doaXRlbGlzdCddKSAmJiAkX1BPU1RbJ2RlbGV0ZV93aGl0ZWxpc3QnXSAhPSAnJykgewogICAgJHBvc3RfY291bnQgPSBjb3VudCgkX1BPU1QpOwogICAgaWYgKCRwb3N0X2NvdW50ID4gMSkgewogICAgICByZXNldCgkX1BPU1QpOwogICAgICAkbG9vcCA9IDA7CiAgICAgIHdoaWxlICgkbG9vcCA8ICRwb3N0X2NvdW50KSB7CiAgICAgICAgJHBvc3RrZXkgPSBrZXkoJF9QT1NUKTsKICAgICAgICBpZiAoc3Vic3RyKCRwb3N0a2V5LCAwLCA1KSA9PSAnd2h0aWQnKSB7CiAgICAgICAgICAkcG9zdHZhbHVlID0gY3VycmVudCgkX1BPU1QpOwogICAgICAgICAgJGFycmF5TG9vcCA9IDA7CiAgICAgICAgICB3aGlsZSgkYXJyYXlMb29wIDwgY291bnQoJHdoaXRlTGlzdEFycmF5KSkgewogICAgICAgICAgICBpZiAoJHdoaXRlTGlzdEFycmF5WyRhcnJheUxvb3BdID09ICRwb3N0dmFsdWUpIHsKICAgICAgICAgICAgICB1bnNldCgkd2hpdGVMaXN0QXJyYXlbJGFycmF5TG9vcF0pOwogICAgICAgICAgICAgICR3aGl0ZUxpc3RBcnJheSA9IGFycmF5X21lcmdlKCR3aGl0ZUxpc3RBcnJheSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGFycmF5TG9vcCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbG9vcCsrOwogICAgICAgIG5leHQoJF9QT1NUKTsKICAgICAgfQogICAgICBpZiAoc2F2ZVJlZmVyZXJMaXN0KCR3aGl0ZUxpc3RBcnJheSwgJHdoaXRlTGlzdEZpbGUpKTsKICAgICAgICBidWZmZXI6OnN0cignPGg0PicgLiBfXygnV2hpdGVsaXN0IHJlZmVyZXJzIHN1Y2Nlc3NmdWxseSBkZWxldGVkJykgLiAnPC9oND4nKTsKICAgIH0KICB9CgogIC8qIEhUTUwgLSBPcHRpb25zICovCiAgYnVmZmVyOjpzdHIoJzxmb3JtIGFjdGlvbj0idG9vbHMucGhwP3A9YmxvY2tyZWZlcmVyIiBtZXRob2Q9InBvc3QiPicpOwogIGJ1ZmZlcjo6c3RyKCc8ZmllbGRzZXQ+PGxlZ2VuZD4nIC4gX18oJ09wdGlvbnMnKSAuICc8L2xlZ2VuZD4nKTsKICBidWZmZXI6OnN0cignPHAgY2xhc3M9ImZpZWxkIj4nKTsKICBidWZmZXI6OnN0cignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib3B0aW9ucyIgdmFsdWU9InRydWUiPicpOwogIGJ1ZmZlcjo6c3RyKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJvcHRfcmVnZXhwIiBuYW1lPSJvcHRfcmVnZXhwIiB2YWx1ZT0idHJ1ZSIgJy4oJG9wdF9yZWdleHA9PXRydWU/J2NoZWNrZWQ9ImNoZWNrZWQiJzonJykuJy8+Jyk7CiAgYnVmZmVyOjpzdHIoX18oJ1VzZSByZWd1bGFyIGV4cHJlc3Npb24nKSk7CiAgYnVmZmVyOjpzdHIoJzxici8+Jyk7CiAgYnVmZmVyOjpzdHIoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9Im9wdF9mb3J3YXJkIiBuYW1lPSJvcHRfZm9yd2FyZCIgdmFsdWU9InRydWUiICcuKCRvcHRfZm9yd2FyZD09dHJ1ZT8nY2hlY2tlZD0iY2hlY2tlZCInOicnKS4nLz4nKTsKICBidWZmZXI6OnN0cihfXygnRm9yd2FyZCB2aXNpdG9yIHRvIGl0XCdzIG93biByZWZlcmVyIGluc3RlYWQgb2YgYmxvY2tpbmcgaXQnKSk7CiAgYnVmZmVyOjpzdHIoJzxici8+Jyk7CiAgYnVmZmVyOjpzdHIoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9Im9wdF9sb2ciIG5hbWU9Im9wdF9sb2ciIHZhbHVlPSJ0cnVlIiAnLigkb3B0X2xvZz09dHJ1ZT8nY2hlY2tlZD0iY2hlY2tlZCInOicnKS4nLz4nKTsKICBidWZmZXI6OnN0cihfXygnTG9nIGJsb2NraW5nJykuJyAnKTsKICBidWZmZXI6OnN0cignKDxhIGhyZWY9IicuJHJlZmVyZXJzTG9nRmlsZS4nIj4nLl9fKCdWaWV3IGxvZycpLic8L2E+KScpOwogIGJ1ZmZlcjo6c3RyKCc8YnIvPicpOwogIGJ1ZmZlcjo6c3RyKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJvcHRfbWVzc2FnZSIgbmFtZT0ib3B0X21lc3NhZ2UiIHZhbHVlPSJ0cnVlIiAnLigkb3B0X21lc3NhZ2U9PXRydWU/J2NoZWNrZWQ9ImNoZWNrZWQiJzonJykuJy8+Jyk7CiAgYnVmZmVyOjpzdHIoX18oJ1VzZSBwZXJzb25hbGl6ZWQgZXJyb3IgbWVzc2FnZScpKTsKICBidWZmZXI6OnN0cignPGJyLz4nKTsKICBidWZmZXI6OnN0cihfXygnUGVyc29uYWxpemVkIGVycm9yIG1lc3NhZ2UgKEhUTUwpIDonKSk7CiAgYnVmZmVyOjpzdHIoJzxici8+Jyk7CiAgYnVmZmVyOjpzdHIoJzx0ZXh0YXJlYSBuYW1lPSJvcHRfbWVzc2FnZV90ZXh0IiBpZD0ib3B0X21lc3NhZ2VfdGV4dCIgY29scz0iNjAiIHJvd3M9IjEwIj4nIC4gJG9wdF9tZXNzYWdlX3RleHQgLiAnPC90ZXh0YXJlYT4nKTsKICBidWZmZXI6OnN0cignPGJyLz4nKTsKICBidWZmZXI6OnN0cihfXygnVGV4dCBvZiB0aGUgIkFjY2VzcyB0byB0aGUgcGFnZSIgbGluayA6JykpOyAgICAgICAgICAgICAgICAgICAgIAogIGJ1ZmZlcjo6c3RyKCc8YnIvPicpOwogIGJ1ZmZlcjo6c3RyKCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im9wdF9saW5rIiBuYW1lPSJvcHRfbGluayIgdmFsdWU9IicuJG9wdF9saW5rLiciIHNpemU9IjQwIi8+Jyk7CiAgYnVmZmVyOjpzdHIoJzwvcD4nKTsKICBidWZmZXI6OnN0cignPHA+Jyk7CiAgYnVmZmVyOjpzdHIoJzxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzdWJtaXQiIHZhbHVlPSInIC4gX18oJ1NhdmUnKSAuICciIC8+Jyk7CiAgYnVmZmVyOjpzdHIoJzwvcD4nKTsKICBidWZmZXI6OnN0cignPC9maWVsZHNldD4nKTsKICBidWZmZXI6OnN0cignPC9mb3JtPicpOwoKICAvKiBIVE1MIC0gQWRkIGEgbmV3IHJlZmVyZXIgdG8gYXV0aG9yaXplICovCiAgYnVmZmVyOjpzdHIoJzxmb3JtIGFjdGlvbj0idG9vbHMucGhwP3A9YmxvY2tyZWZlcmVyIiBtZXRob2Q9InBvc3QiPicpOwogIGJ1ZmZlcjo6c3RyKCc8ZmllbGRzZXQ+PGxlZ2VuZD4nIC4gX18oJ0FkZCBhIG5ldyByZWZlcmVyIHRvIGF1dGhvcml6ZScpIC4gJzwvbGVnZW5kPicpOwogIGJ1ZmZlcjo6c3RyKCc8cCBjbGFzcz0iZmllbGQiPicpOwogIGJ1ZmZlcjo6c3RyKCc8bGFiZWwgZm9yPSJyZWZlcmVyIiBjbGFzcz0iZmxvYXQiPicgLiBfXygnUmVmZXJlciB0byBhdXRob3JpemUgOicpIC4gJzwvbGFiZWw+Jyk7CiAgYnVmZmVyOjpzdHIoJzxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgbmFtZT0id2hpdGVsaXN0IiBpZD0id2hpdGVsaXN0IiAvPicpOwogIGJ1ZmZlcjo6c3RyKCcmbmJzcDsmbmJzcDsnKTsKICBidWZmZXI6OnN0cignPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IicgLiBfXygnU2F2ZScpIC4gJyIgLz4nKTsKICBidWZmZXI6OnN0cignPC9wPicpOwogIGJ1ZmZlcjo6c3RyKCc8L2ZpZWxkc2V0PicpOwogIGJ1ZmZlcjo6c3RyKCc8L2Zvcm0+Jyk7CgogIC8qIEhUTUwgLSBBdXRob3JpemVkIHJlZmVyZXIgbGlzdCAqLwogIGJ1ZmZlcjo6c3RyKCc8Zm9ybSBhY3Rpb249InRvb2xzLnBocD9wPWJsb2NrcmVmZXJlciIgbWV0aG9kPSJwb3N0Ij4nKTsKICBidWZmZXI6OnN0cignPGZpZWxkc2V0PjxsZWdlbmQ+JyAuIF9fKCdBdXRob3JpemVkIHJlZmVyZXIgbGlzdCcpIC4gJzwvbGVnZW5kPicpOwogIGJ1ZmZlcjo6c3RyKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkZWxldGVfd2hpdGVsaXN0IiB2YWx1ZT0idHJ1ZSI+Jyk7CiAgYnVmZmVyOjpzdHIoJzxkaXYgc3R5bGU9ImhlaWdodDogMjAwcHg7IG92ZXJmbG93OiBhdXRvIj48dGFibGU+PHRyPjx0ZCBjb2xzcGFuPSIyIj48Yj4nIC4gX18oJ1JlZmVyZXInKSAuICc8L2I+PC90ZD48L3RyPicpOwogIGlmKGNvdW50KCR3aGl0ZUxpc3RBcnJheSkgPCAxKSB7CiAgICBidWZmZXI6OnN0cignPHRyPjx0ZCBjb2xzcGFuPSIyIj4nIC4gX18oJ05vIHJlZmVyZXIgaXMgYXV0aG9yaXplZCBmb3Igbm93JykgLiAnPC90ZD48L3RyPicpOwogIH0gZWxzZSB7CiAgICAkbG9vcCA9IDA7CiAgICB3aGlsZSAoJGxvb3AgPCBjb3VudCgkd2hpdGVMaXN0QXJyYXkpKSB7CiAgICAgIGJ1ZmZlcjo6c3RyKCc8dHIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmNmY5ZjIiPicpOwogICAgICBidWZmZXI6OnN0cignPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0id2h0aWQnLiR3aGl0ZUxpc3RBcnJheVskbG9vcF0uJyIgdmFsdWU9IicuJHdoaXRlTGlzdEFycmF5WyRsb29wXS4nIi8+Jyk7CiAgICAgIGJ1ZmZlcjo6c3RyKCc8dGQ+JyAuICR3aGl0ZUxpc3RBcnJheVskbG9vcF0gLiAnPC90ZD4nKTsKICAgICAgYnVmZmVyOjpzdHIoJzwvdHI+Jyk7CiAgICAgICRsb29wKys7CiAgICB9CiAgfQogIGJ1ZmZlcjo6c3RyKCc8L3RhYmxlPjwvZGl2PicpOwogIGJ1ZmZlcjo6c3RyKCc8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJyAuIF9fKCdEZWxldGUnKSAuICciLz4nKTsKICBidWZmZXI6OnN0cignPC9maWVsZHNldD4nKTsKICBidWZmZXI6OnN0cignPC9mb3JtPicpOwoKICAvKiBIVE1MIC0gQWRkIGEgbmV3IHJlZmVyZXIgdG8gYmxvY2sgKi8KICBidWZmZXI6OnN0cignPGZvcm0gYWN0aW9uPSJ0b29scy5waHA/cD1ibG9ja3JlZmVyZXIiIG1ldGhvZD0icG9zdCI+Jyk7CiAgYnVmZmVyOjpzdHIoJzxmaWVsZHNldD48bGVnZW5kPicgLiBfXygnQWRkIGEgbmV3IHJlZmVyZXIgdG8gYmxvY2snKSAuICc8L2xlZ2VuZD4nKTsKICBidWZmZXI6OnN0cignPHAgY2xhc3M9ImZpZWxkIj4nKTsKICBidWZmZXI6OnN0cignPGxhYmVsIGZvcj0icmVmZXJlciIgY2xhc3M9ImZsb2F0Ij4nIC4gX18oJ1JlZmVyZXIgdG8gYmxvY2sgOicpIC4gJzwvbGFiZWw+Jyk7CiAgYnVmZmVyOjpzdHIoJzxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgbmFtZT0icmVmZXJlciIgaWQ9InJlZmVyZXIiIC8+Jyk7CiAgYnVmZmVyOjpzdHIoJyZuYnNwOyZuYnNwOycpOwogIGJ1ZmZlcjo6c3RyKCc8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iJyAuIF9fKCdTYXZlJykgLiAnIiAvPicpOwogIGJ1ZmZlcjo6c3RyKCc8L3A+Jyk7CiAgYnVmZmVyOjpzdHIoJzwvZmllbGRzZXQ+Jyk7CiAgYnVmZmVyOjpzdHIoJzwvZm9ybT4nKTsKCiAgLyogSFRNTCAtIEJsb2NrZWQgcmVmZXJlciBsaXN0ICovCiAgYnVmZmVyOjpzdHIoJzxmb3JtIGFjdGlvbj0idG9vbHMucGhwP3A9YmxvY2tyZWZlcmVyIiBtZXRob2Q9InBvc3QiPicpOwogIGJ1ZmZlcjo6c3RyKCc8ZmllbGRzZXQ+PGxlZ2VuZD4nIC4gX18oJ0Jsb2NrZWQgcmVmZXJlciBsaXN0JykgLiAnPC9sZWdlbmQ+Jyk7CiAgYnVmZmVyOjpzdHIoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRlbGV0ZSIgdmFsdWU9InRydWUiPicpOwogIGJ1ZmZlcjo6c3RyKCc8ZGl2IHN0eWxlPSJoZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdzogYXV0bzsiPjx0YWJsZT48dHI+PHRkIGNvbHNwYW49IjIiPjxiPicgLiBfXygnUmVmZXJlcicpIC4gJzwvYj48L3RkPjwvdHI+Jyk7CiAgaWYoY291bnQoJHJlZmVyZXJzTGlzdEFycmF5KSA8IDEpIHsKICAgIGJ1ZmZlcjo6c3RyKCc8dHI+PHRkIGNvbHNwYW49IjIiPicgLiBfXygnTm8gcmVmZXJlciBpcyBibG9ja2VkIGZvciBub3cnKSAuICc8L3RkPjwvdHI+Jyk7CiAgfSBlbHNlIHsKICAgICRsb29wID0gMDsKICAgIHdoaWxlICgkbG9vcCA8IGNvdW50KCRyZWZlcmVyc0xpc3RBcnJheSkpIHsKICAgICAgYnVmZmVyOjpzdHIoJzx0ciBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjlmMiI+Jyk7CiAgICAgIGJ1ZmZlcjo6c3RyKCc8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJyZWZpZCcuJHJlZmVyZXJzTGlzdEFycmF5WyRsb29wXS4nIiB2YWx1ZT0iJy4kcmVmZXJlcnNMaXN0QXJyYXlbJGxvb3BdLiciLz4nKTsKICAgICAgYnVmZmVyOjpzdHIoJzx0ZD4nIC4gJHJlZmVyZXJzTGlzdEFycmF5WyRsb29wXSAuICc8L3RkPicpOwogICAgICBidWZmZXI6OnN0cignPC90cj4nKTsKICAgICAgJGxvb3ArKzsKICAgIH0KICB9CiAgYnVmZmVyOjpzdHIoJzwvdGFibGU+PC9kaXY+Jyk7CiAgYnVmZmVyOjpzdHIoJzxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSInIC4gX18oJ0RlbGV0ZScpIC4gJyIvPicpOwogIGJ1ZmZlcjo6c3RyKCc8L2ZpZWxkc2V0PicpOwogIGJ1ZmZlcjo6c3RyKCc8L2Zvcm0+Jyk7CgogIC8qIEhUTUwgLSBJbnN0YWxsYXRpb24gaGVscCAqLwogIGJ1ZmZlcjo6c3RyKCc8ZmllbGRzZXQ+PGxlZ2VuZD4nIC4gX18oJ0luc3RhbGxhdGlvbicpIC4gJzwvbGVnZW5kPicpOwogIGJ1ZmZlcjo6c3RyKCc8cD4nIC4gX18oJ1RvIHVzZSBwbHVnaW4sIGp1c3QgYWRkIHBhcnQgb2YgdGhlIHJlZmVyZXIgeW91IHdhbnQgdG8gYmxvY2s7IGkuZSBhZGQgInNvbWVidXp6d29yZCIgdG8gYmxvY2sgYW55IHJlZmVyZXIgd2hpY2ggaGF2ZSAic29tZWJ1enp3b3JkIiBpbi4nKSAuICc8L3A+Jyk7CiAgYnVmZmVyOjpzdHIoJzx1bD4nKTsKICBidWZmZXI6OnN0cignPGxpPicgLiAnIicuX18oJ1VzZSByZWd1bGFyIGV4cHJlc3Npb24nKSAuICciICcgLiBfXygnaXMgbm90IGNoZWNrZWQnKSAuICcgOiAnIC5fXygnWW91IGhhdmUgdG8gdXNlIHBhcnQgb2YgcmVmZXJlcnMsIG9yIHRoZWlyIGZ1bGwgYWRkcmVzcy4nKSAuICc8L2xpPicpOwogIGJ1ZmZlcjo6c3RyKCc8bGk+JyAuICciJy5fXygnVXNlIHJlZ3VsYXIgZXhwcmVzc2lvbicpIC4gJyIgJyAuIF9fKCdpcyBjaGVja2VkJykgLiAnIDogJyAuX18oJ1lvdSBoYXZlIHRvIHVzZSByZWd1bGFyIGV4cHJlc3Npb24gKGNhc2UgaW5zZW5zaXRpdmUpLicpIC4gJzwvbGk+Jyk7CiAgYnVmZmVyOjpzdHIoJzwvdWw+Jyk7CiAgYnVmZmVyOjpzdHIoX18oJ0lmIHlvdSBtb2RpZnkgZGlmZmVyZW50IGZvcm1zIGF0IHRoZSBzYW1lIHRpbWUsIG9ubHkgdGhlIG9uZSB5b3UgY2hvc2UgdG8gc2F2ZSBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQuJykpOwogIGJ1ZmZlcjo6c3RyKCc8YnIvPjxici8+Jyk7CiAgYnVmZmVyOjpzdHIoX18oJ1RoZSBhdXRob3JpemF0aW9uIGhhcyBwcmlvcml0eSBvbiBibG9ja2luZywgYW5kIG1heSB1c2UgcmVndWxhciBleHByZXNzaW9ucyB0b28uJykpOwogIGJ1ZmZlcjo6c3RyKCc8aHI+Jyk7CiAgYnVmZmVyOjpzdHIoJzxwPicgLiBfXygnSWYgeW91IHVwZ3JhZGUgZnJvbSB2ZXJzaW9uIDEuMCBvciAxLjEsIHlvdSB3aWxsIGhhdmUgdG8gY29udmVydCB0aGUgcmVmZXJlcnMgbGlzdCB0byB0aGUgbmV3IGZvcm1hdC4nKSAuICc8L3A+Jyk7CiAgYnVmZmVyOjpzdHIoJzxmb3JtIGFjdGlvbj0idG9vbHMucGhwP3A9YmxvY2tyZWZlcmVyIiBtZXRob2Q9InBvc3QiPicpOwogIGJ1ZmZlcjo6c3RyKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb252ZXJ0IiB2YWx1ZT0idHJ1ZSI+Jyk7CiAgYnVmZmVyOjpzdHIoJzxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSInIC4gX18oJ0NvbnZlcnQnKSAuICciLz4nKTsKICBidWZmZXI6OnN0cignPC9mb3JtPicpOwogIGJ1ZmZlcjo6c3RyKCc8L2ZpZWxkc2V0PicpOwp9IGVsc2UgewovKioqKiogU3RhdGlzdGljcyBwYWdlICoqKioqLwogIAogIC8qIFVzZWZ1bGwgYXJyYXlzIAogICAqICRhcnJheVRpbWUgOiBBcnJheSB3aXRoIHRpbWUgc3RhdGlzdGljcyA6IGxhc3QgMjRoLCB3ZWVrLCBtb250aCwgeWVhcgogICAqICAgICAgICAgICAgICBhbmQgYWxsIHRpbWUuCiAgICogJGFycmF5UmVmZXJlbnQgOiBBcnJheSB3aXRoIHJlZmVyZW50cyBzdGF0aXN0aWNzCiAgICogJGFycmF5SG9zdHMgOiBBcnJheSB3aXRoIGJsb2NrZWQgcmVmZXJlbnRzIChob3N0bmFtZSkKICAgKi8KCiAgLyogSW5pdCB2YXJpYWJsZXMgKi8KICAkY3VyVGltZSA9IHRpbWUoKTsKCiAgLyogSW5pdCB0aW1lIHN0YXRpc3RpY3MgYXJyYXkgKi8KICAkYXJyYXlUaW1lID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAnZGF5JyAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAnd2VlaycgID0+IDAsCiAgICAgICAgICAgICAgICAgICAnbW9udGgnID0+IDAsCiAgICAgICAgICAgICAgICAgICAneWVhcicgID0+IDAsCiAgICAgICAgICAgICAgICAgICAnYWxsJyAgID0+IDAKICAgICAgICAgICAgICAgKTsKICAKICAvKiBJbml0IHJlZmVyZW50IHN0YXRpc3RpY3MgYXJyYXkgKi8KICBpZiAoZmlsZV9leGlzdHMoJHJlZmVyZXJzTGlzdEZpbGUpKSB7CiAgICAkcmVmZXJlcnNMaXN0QXJyYXkgPSBmaWxlKCRyZWZlcmVyc0xpc3RGaWxlKTsKICAgICRsb29wID0gMDsKICAgIHdoaWxlICgkbG9vcCA8IGNvdW50KCRyZWZlcmVyc0xpc3RBcnJheSkpIHsKICAgICAgJHJlZmVyZXJzTGlzdEFycmF5WyRsb29wXSA9IHRyaW0oJHJlZmVyZXJzTGlzdEFycmF5WyRsb29wXSk7CiAgICAgICRsb29wKys7CiAgICB9CiAgICAkYXJyYXlSZWZlcmVycyA9IGFycmF5X2ZsaXAoJHJlZmVyZXJzTGlzdEFycmF5KTsKICAgIHJlc2V0KCRhcnJheVJlZmVyZXJzKTsKICAgICRsb29wID0gMDsKICAgIHdoaWxlICgkbG9vcCA8IGNvdW50KCRhcnJheVJlZmVyZXJzKSkgewogICAgICAkYXJyYXlSZWZlcmVyc1trZXkoJGFycmF5UmVmZXJlcnMpXSA9IDA7CiAgICAgIG5leHQoJGFycmF5UmVmZXJlcnMpOwogICAgICAkbG9vcCsrOwogICAgfQogIH0gZWxzZSB7CiAgICAkYXJyYXlSZWZlcmVycyA9IGFycmF5KCk7CiAgfQogCiAgLyogSW5pdCByZWZlcmVudCBob3N0cyBzdGF0aXN0aWNzIGFycmF5ICovCiAgJGFycmF5SG9zdHMgPSBhcnJheSgpOwogCiAgLyogU3RlcCBmb3J3YXJkIGxvZyBmaWxlIHRvIGZpbGwgYXJyYXlzICovIAogIGlmIChmaWxlX2V4aXN0cygkcmVmZXJlcnNMb2dGaWxlKSkgewogICAgJGZwb2ludGVyID0gZm9wZW4oJHJlZmVyZXJzTG9nRmlsZSwgJ3InKTsKICAgIHdoaWxlICghZmVvZigkZnBvaW50ZXIpKSB7CiAgICAgIHVuc2V0KCRjdXJMaW5lKTsKICAgICAgdW5zZXQoJGxpbmVBcnJheSk7CiAgICAgIHVuc2V0KCR0aW1lU3RhbXApOwogICAgICB1bnNldCgkcmVmZXJlcik7CiAgICAgICRjdXJsaW5lID0gZmdldHMoJGZwb2ludGVyKTsKICAgICAgJGxpbmVBcnJheSA9IGV4cGxvZGUoJzsnLCAkY3VybGluZSk7CiAgICAgICR0aW1lU3RhbXAgPSAkbGluZUFycmF5WzBdOwogICAgICAkaG9zdCA9ICRsaW5lQXJyYXlbNF07CiAgICAgICRyZWZlcmVyID0gJGxpbmVBcnJheVs1XTsKICAgICAgLyogZmlsbCBob3N0cyBhcnJheSAqLwogICAgICAkaG9zdG5hbWUgPSBzdWJzdHIoJGhvc3QsIHN0cnBvcygkaG9zdCwgJzovLycpKzMgKTsKICAgICAgJGhvc3RuYW1lID0gc3Vic3RyKCRob3N0bmFtZSwgMCwgc3RycG9zKCRob3N0bmFtZSwgJy8nKSApOwogICAgICAkYXJyYXlIb3N0c1t0cmltKCRob3N0bmFtZSldKys7CiAgICAgIC8qIGZpbGwgcmVmZXJlcnMgYXJyYXkgKi8KICAgICAgaWYgKHRyaW0oJHJlZmVyZXIpICE9ICcnKQogICAgICAgICRhcnJheVJlZmVyZXJzW3RyaW0oJHJlZmVyZXIpXSsrOwogICAgICAvKiBmaWxsIHRpbWUgYXJyYXkgKi8KICAgICAgaWYgKHRyaW0oJHRpbWVTdGFtcCkpIHsKICAgICAgICAkYXJyYXlUaW1lWydhbGwnXSsrOwogICAgICAgIGlmICgoJHRpbWVTdGFtcCszNjAwKjI0KjM2NSkgPj0gJGN1clRpbWUpCiAgICAgICAgICAkYXJyYXlUaW1lWyd5ZWFyJ10rKzsKICAgICAgICBpZiAoKCR0aW1lU3RhbXArMzYwMCoyNCozMCkgPj0gJGN1clRpbWUpCiAgICAgICAgICAkYXJyYXlUaW1lWydtb250aCddKys7CiAgICAgICAgaWYgKCgkdGltZVN0YW1wKzM2MDAqMjQqNykgPj0gJGN1clRpbWUpCiAgICAgICAgICAkYXJyYXlUaW1lWyd3ZWVrJ10rKzsKICAgICAgICBpZiAoKCR0aW1lU3RhbXArMzYwMCoyNCkgPj0gJGN1clRpbWUpCiAgICAgICAgICAkYXJyYXlUaW1lWydkYXknXSsrOyAKICAgICAgfQogICAgfQogICAgZmNsb3NlKCRmcG9pbnRlcik7CiAgfQoKICAvKiBIVE1MIC0gSGVscCAqLwogIGJ1ZmZlcjo6c3RyKCc8ZmllbGRzZXQ+PGxlZ2VuZD4nIC4gX18oJ0hlbHAnKSAuICc8L2xlZ2VuZD4nKTsKICBidWZmZXI6OnN0cihfXygnQWxsIGJsb2NraW5ncyA6IG51bWJlciBvZiBibG9ja2VkIHJlZmVyZXJzIHNpbmNlIGJlZ2lubmluZyBvZiB0aGUgbG9nLicpKTsKICBidWZmZXI6OnN0cignPGJyLz4nKTsKICBidWZmZXI6OnN0cihfXygnWWVhcmx5IDogbnVtYmVyIG9mIGJsb2NrZWQgcmVmZXJlcnMgc2luY2UgbGFzdCAzNjUgZGF5cy4nKSk7CiAgYnVmZmVyOjpzdHIoJzxici8+Jyk7CiAgYnVmZmVyOjpzdHIoX18oJ01vbnRobHkgOiBudW1iZXIgb2YgYmxvY2tlZCByZWZlcmVycyBzaW5jZSBsYXN0IDMwIGRheXMuJykpOwogIGJ1ZmZlcjo6c3RyKCc8YnIvPicpOwogIGJ1ZmZlcjo6c3RyKF9fKCdXZWVrbHkgOiBudW1iZXIgb2YgYmxvY2tlZCByZWZlcmVycyBzaW5jZSBsYXN0IDcgZGF5cy4nKSk7CiAgYnVmZmVyOjpzdHIoJzxici8+Jyk7CiAgYnVmZmVyOjpzdHIoX18oJ0RhaWx5IDogbnVtYmVyIG9mIGJsb2NrZWQgcmVmZXJlcnMgc2luY2UgbGFzdCAyNCBob3Vycy4nKSk7CiAgYnVmZmVyOjpzdHIoJzwvZmllbGRzZXQ+Jyk7CgogIC8qIEhUTUwgLSBUaW1lIHN0YXRpc3RpY3MgKi8KICBidWZmZXI6OnN0cignPGZpZWxkc2V0PjxsZWdlbmQ+JyAuIF9fKCdUaW1lIHN0YXRpc3RpY3MnKSAuICc8L2xlZ2VuZD4nKTsKICBidWZmZXI6OnN0cignPGxhYmVsIGZvcj0iYWxsIiBjbGFzcz0iZmxvYXQiPicgLiBfXygnQWxsIGJsb2NraW5ncyA6JykgLiAnPC9sYWJlbD4nKTsKICBidWZmZXI6OnN0cigkYXJyYXlUaW1lWydhbGwnXS4nPGJyLz4nKTsKICBidWZmZXI6OnN0cignPGxhYmVsIGZvcj0ieWVhciIgY2xhc3M9ImZsb2F0Ij4nIC4gX18oJ1llYXJseSA6JykgLiAnPC9sYWJlbD4nKTsKICBidWZmZXI6OnN0cigkYXJyYXlUaW1lWyd5ZWFyJ10uJzxici8+Jyk7CiAgYnVmZmVyOjpzdHIoJzxsYWJlbCBmb3I9Im1vbnRoIiBjbGFzcz0iZmxvYXQiPicgLiBfXygnTW9udGhseSA6JykgLiAnPC9sYWJlbD4nKTsKICBidWZmZXI6OnN0cigkYXJyYXlUaW1lWydtb250aCddLic8YnIvPicpOwogIGJ1ZmZlcjo6c3RyKCc8bGFiZWwgZm9yPSJ3ZWVrIiBjbGFzcz0iZmxvYXQiPicgLiBfXygnV2Vla2x5IDonKSAuICc8L2xhYmVsPicpOwogIGJ1ZmZlcjo6c3RyKCRhcnJheVRpbWVbJ3dlZWsnXS4nPGJyLz4nKTsKICBidWZmZXI6OnN0cignPGxhYmVsIGZvcj0iZGF5IiBjbGFzcz0iZmxvYXQiPicgLiBfXygnRGFpbHkgOicpIC4gJzwvbGFiZWw+Jyk7CiAgYnVmZmVyOjpzdHIoJGFycmF5VGltZVsnZGF5J10uJzxici8+Jyk7CiAgYnVmZmVyOjpzdHIoJzwvZmllbGRzZXQ+Jyk7CgogIC8qIEhUTUwgLSBSZWZlcmVyIHN0YXRpc3RpY3MgKi8KICBhcnNvcnQoJGFycmF5UmVmZXJlcnMpOwogICRsb29wID0gMDsKICByZXNldCgkYXJyYXlSZWZlcmVycyk7CiAgYnVmZmVyOjpzdHIoJzxmaWVsZHNldD48bGVnZW5kPicgLiBfXygnUmVmZXJlcnMgc3RhdGlzdGljcycpIC4gJzwvbGVnZW5kPicpOwogIGJ1ZmZlcjo6c3RyKCc8ZGl2IHN0eWxlPSJoZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdzogYXV0byI+Jyk7CiAgd2hpbGUgKCRsb29wIDwgY291bnQoJGFycmF5UmVmZXJlcnMpKSB7CiAgICBidWZmZXI6OnN0cignPGxhYmVsIGZvcj0iJy5rZXkoJGFycmF5UmVmZXJlcnMpLiciIHN0eWxlPSJ3aWR0aDogNDAwcHgiIGNsYXNzPSJmbG9hdCI+Jy5rZXkoJGFycmF5UmVmZXJlcnMpLicgOiA8L2xhYmVsPicpOwogICAgYnVmZmVyOjpzdHIoJGFycmF5UmVmZXJlcnNba2V5KCRhcnJheVJlZmVyZXJzKV0uJyAoJy5udW1iZXJfZm9ybWF0KCRhcnJheVJlZmVyZXJzW2tleSgkYXJyYXlSZWZlcmVycyldLyRhcnJheVRpbWVbJ2FsbCddKjEwMCwgMikuJyUpPGJyLz4nKTsKICAgIG5leHQoJGFycmF5UmVmZXJlcnMpOwogICAgJGxvb3ArKzsKICB9CiAgYnVmZmVyOjpzdHIoJzwvZGl2PicpOwogIGJ1ZmZlcjo6c3RyKCc8L2ZpZWxkc2V0PicpOwoKICAvKiBIVE1MIC0gUmVmZXJlciBob3N0cyBzdGF0aXN0aWNzICovCiAgYXJzb3J0KCRhcnJheUhvc3RzKTsKICAkbG9vcCA9IDA7CiAgcmVzZXQoJGFycmF5SG9zdHMpOwogIGJ1ZmZlcjo6c3RyKCc8ZmllbGRzZXQ+PGxlZ2VuZD4nIC4gX18oJ1JlZmVyZXIgaG9zdHMgc3RhdGlzdGljcycpIC4gJzwvbGVnZW5kPicpOwogIGJ1ZmZlcjo6c3RyKCc8ZGl2IHN0eWxlPSJoZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdzogYXV0byI+Jyk7CiAgd2hpbGUgKCRsb29wIDwgY291bnQoJGFycmF5SG9zdHMpKSB7CiAgICBidWZmZXI6OnN0cignPGxhYmVsIGZvcj0iJy5rZXkoJGFycmF5SG9zdHMpLiciIHN0eWxlPSJ3aWR0aDogNDAwcHgiIGNsYXNzPSJmbG9hdCI+Jy5rZXkoJGFycmF5SG9zdHMpLicgOiA8L2xhYmVsPicpOwogICAgYnVmZmVyOjpzdHIoJGFycmF5SG9zdHNba2V5KCRhcnJheUhvc3RzKV0uJyAoJy5udW1iZXJfZm9ybWF0KCRhcnJheUhvc3RzW2tleSgkYXJyYXlIb3N0cyldLyRhcnJheVRpbWVbJ2FsbCddKjEwMCwgMikuJyUpPGJyLz4nKTsKICAgIG5leHQoJGFycmF5SG9zdHMpOwogICAgJGxvb3ArKzsKICB9CiAgYnVmZmVyOjpzdHIoJzwvZGl2PicpOwogIGJ1ZmZlcjo6c3RyKCc8L2ZpZWxkc2V0PicpOwp9CgovKioqKiogRnVuY3Rpb25zIGRlY2xhcmF0aW9uICoqKioqLwpmdW5jdGlvbiBzYXZlUmVmZXJlckxpc3QoJHJlZmVyZXJBcnJheSwgJGZpbGVOYW1lKSB7CiAgJHRtcFJlZmVyZXJzRmlsZSA9IGRpcm5hbWUoX19GSUxFX18pLicvdG1wLnR4dCc7CgogIGlmICghKCRmcG9pbnRlciA9IGZvcGVuKCR0bXBSZWZlcmVyc0ZpbGUsICd3KycpKSkgewogICAgYnVmZmVyOjpzdHIoJzxoND4nIC4gX18oJ0NvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlJykgLiAnICcgLiAkdG1wUmVmZXJlcnNGaWxlLiAnPC9oND4nKTsKICAgIHJldHVybiBmYWxzZTsKICB9IGVsc2UgewogICAgJGxvb3AgPSAwOwogICAgd2hpbGUgKCRsb29wIDwgY291bnQoJHJlZmVyZXJBcnJheSkpIHsKICAgICAgZndyaXRlKCRmcG9pbnRlciwgJHJlZmVyZXJBcnJheVskbG9vcF0uIlxuIik7CiAgICAgICRsb29wKys7CiAgICB9CiAgICBmY2xvc2UoJGZwb2ludGVyKTsKICAgIGlmICghY29weSgkdG1wUmVmZXJlcnNGaWxlLCAkZmlsZU5hbWUpKSB7CiAgICAgICBidWZmZXI6OnN0cignPGg0PicgLiBfXygnQ291bGQgbm90IGNvcHkgdGVtcCBmaWxlJykgLiAnICcgLiAkdG1wUmVmZXJlcnNGaWxlLicgJy4gX18oJ3RvIGZpbmFsIGZpbGUnKSAuICcgJyAuICRmaWxlTmFtZSAuICc8L2g0PicpOwogICAgICAgdW5saW5rKCR0bXBSZWZlcmVyc0ZpbGUpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgIHVubGluaygkdG1wUmVmZXJlcnNGaWxlKTsKICAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfQoKZnVuY3Rpb24gc2F2ZU9wdGlvbnMoJiRwb3N0KSB7CiAgJHRtcE9wdGlvbnNGaWxlID0gZGlybmFtZShfX0ZJTEVfXykuJy9yZWZlcmVyc19vcHRpb25zLnBocCc7CiAgJG9wdGlvbnNGaWxlID0gRENfU0hBUkVfRElSLicvYmxvY2tyZWZlcmVyL3JlZmVyZXJzX29wdGlvbnMucGhwJzsKCiAgaWYgKCEoJGZwb2ludGVyID0gZm9wZW4oJHRtcE9wdGlvbnNGaWxlLCAndysnKSkpIHsKICAgIGJ1ZmZlcjo6c3RyKCc8aDQ+JyAuIF9fKCdDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZScpIC4gJyAnIC4gJHRtcE9wdGlvbnNGaWxlLiAnPC9oND4nKTsKICAgIHJldHVybiBmYWxzZTsKICB9IGVsc2UgewogICAgZndyaXRlKCRmcG9pbnRlciwgJzw/cGhwJy4iXG4iKTsKICAgIGZ3cml0ZSgkZnBvaW50ZXIsICckb3B0X2NoYXJzZXQ9IicuZGNfZW5jb2RpbmcuIlwiO1xuIik7CiAgICAkcG9zdGNvdW50ID0gY291bnQoJHBvc3QpOwogICAgJGxvb3AgPSAwOwogICAgcmVzZXQoJHBvc3QpOwogICAgd2hpbGUgKCRsb29wIDwgJHBvc3Rjb3VudCkgewogICAgICAkcG9zdGtleSA9IGtleSgkcG9zdCk7CiAgICAgIGlmICgkcG9zdGtleSAhPSAnb3B0aW9ucycpIHsKICAgICAgICBmd3JpdGUoJGZwb2ludGVyLCAnJCcuJHBvc3RrZXkuJz0iJy5zdHJfcmVwbGFjZSgnIicsJ1wiJyxjdXJyZW50KCRwb3N0KSkuIlwiO1xuIik7CiAgICAgIH0KICAgICAgbmV4dCgkcG9zdCk7CiAgICAgICRsb29wKys7CiAgICB9CiAgICBmd3JpdGUoJGZwb2ludGVyLCAnPz4nKTsKICAgIGZjbG9zZSgkZnBvaW50ZXIpOwogICAgaWYgKCFjb3B5KCR0bXBPcHRpb25zRmlsZSwgJG9wdGlvbnNGaWxlKSkgewogICAgICAgYnVmZmVyOjpzdHIoJzxoND4nIC4gX18oJ0NvdWxkIG5vdCBjb3B5IHRlbXAgZmlsZScpIC4gJyAnIC4gJHRtcE9wdGlvbnNGaWxlLicgJy4gX18oJ3RvIGZpbmFsIGZpbGUnKSAuICcgJyAuICRvcHRpb25zRmlsZSAuICc8L2g0PicpOwogICAgfSBlbHNlIHsKICAgICAgIGJ1ZmZlcjo6c3RyKCc8aDQ+JyAuIF9fKCdPcHRpb25zIHN1Y2Nlc3NmdWxseSBzYXZlZCcpIC4gJzwvaDQ+Jyk7CiAgICB9CiAgICB1bmxpbmsoJHRtcE9wdGlvbnNGaWxlKTsKICB9Cn0KPz4K";}}