From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=AWL,DRUGS_MUSCLE,SPF_NEUTRAL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id 83B66BC69 for ; Sun, 25 Mar 2007 22:42:42 +0200 (CEST) Received: from ug-out-1314.google.com (ug-out-1314.google.com [66.249.92.168]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id l2PKgf35030718 for ; Sun, 25 Mar 2007 22:42:42 +0200 Received: by ug-out-1314.google.com with SMTP id k3so1400324ugf for ; Sun, 25 Mar 2007 13:42:41 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:mime-version:content-type; b=nNJsqc1Tjhn+kviMmhVlrOEovi8fKyoDabfAmy83v4My9ls9iO03A5n7NmeZbgIXS9+4oWJL0UAIfMmbBxmaJUNlFWR24SRgq49Xq5KfCmUlZr3DRNGCudPwPqVseCoTknQf5UfhHwX+cR4XYs2OPG8K0qHuGlaD9hYE3KnND3o= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:mime-version:content-type; b=EugeDLxHjBUQJ82iCw7unyS76FFLkbd81sA5Bt81NwKfSVnhoJ5Ed/J0kmVcyoOXGqVSFsl2MYmt4uC56sJ9Qer4hbz1uioi22Jy/pHj3VEmiaos9WxNZdNTZaPdY8CGpF78AZF7F1lw4hnNAHuE6oig9zx5S02WOOA6p4FAYXA= Received: by 10.114.136.1 with SMTP id j1mr2334666wad.1174855359882; Sun, 25 Mar 2007 13:42:39 -0700 (PDT) Received: by 10.114.183.4 with HTTP; Sun, 25 Mar 2007 13:42:39 -0700 (PDT) Message-ID: Date: Sun, 25 Mar 2007 22:42:39 +0200 From: "Nicolas Pouillard" To: "Martin Jambon" Subject: [Camlp4 3.10] The rosetta stone (Was: lists without $list:...$) Cc: caml-list@inria.fr MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_36253_17904398.1174855359817" X-j-chkmail-Score: MSGID : 4606DEC1.001 on concorde : j-chkmail score : XX : 0/20 2 0.000 -> 2 X-Miltered: at concorde with ID 4606DEC1.001 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; camlp:01 ens-lyon:01 syntax:01 sexp:01 syntax:01 ioxml:01 translated:01 camlp:01 ctyp:01 ml':01 ctyp:01 constructors:01 meth:01 cheers:01 ocaml:01 X-Attachments: cset="UTF-8" type="application/octet-stream" name="pa_json_static.patch" name="pa_json_static.patch" name="pa_json_static.ml" name="pa_json_static.ml" ------=_Part_36253_17904398.1174855359817 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 3/24/07, Martin Jambon wrote: > > I would like you or anyone knowledgeable to translate one significant > syntax extension. You know, some kind of Rosetta stone. You can take > Markus' sexp syntax extension or ioxml if you prefer, it won't be much > different. Here is your rosetta stone :) I translated pa_json_static.ml. To highlight a little the changes in the AST, I want to show an input snippet and two translations: For the old camlp4 it was: | Object l -> let ml = List.map (fun x -> (x.field_caml_name, convert x.field_type)) l in <:ctyp< < $list:ml$ > >> The type of `ml' is (string * ctyp) list. The concept of quotations is to get concrete syntax for abstract terms and then avoid to learn all constructors and types. Alas for some of them you have to know the type. In the new version you can express any term (except one) by concrete syntax. The closest version is: | Object l -> let ml = List.map (fun x -> <:ctyp< $lid:x.field_caml_name$ : $convert x.field_type$ >>) l in <:ctyp< < $list:ml$ > >> Here one doesn't know if methods declarations are a pair or something else and we don't care. Since one knows the syntax << method_name : method_type >>. At this place the list antiquotation $list:ml$ is a sugar for $Ast.tySem_of_list ml$. By changing a little more the code one can use something closer to the object syntax. | Object l -> let ml = List.fold_right (fun x acc -> <:ctyp< $lid:x.field_caml_name$ : $convert x.field_type$ ; $acc$ >>) l <:ctyp<>> in <:ctyp< < $ml$ > >> The general syntax of object types (omiting `..' for the row variable) is < meth1 : type1 ; ... ; methN : typeN > then one can avoid to construct a list (since map is a fold_right with `::') and then call a function that destruct it. Another thing to point out is the use of the nil type <:ctyp<>> that is quite useful to start the folding. In this translation I used both styles depending of the context. I attach the patch and the new version (compiles with camlp4orf). Cheers, -- Nicolas Pouillard ------=_Part_36253_17904398.1174855359817 Content-Type: application/octet-stream; name="pa_json_static.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pa_json_static.patch" X-Attachment-Id: f_ezpyb13z LS0tIHBhX2pzb25fc3RhdGljLm9yaWcubWwJMjAwNy0wMy0wNSAwMTozNDowOC4wMDAwMDAwMDAg KzAxMDAKKysrIHBhX2pzb25fc3RhdGljLm1sCTIwMDctMDMtMjUgMjE6MDA6MjEuMDAwMDAwMDAw ICswMjAwCkBAIC0zMCw3ICszMCw3IEBACiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKikKIAotCitvcGVuIENhbWxwNC5Q cmVDYXN0CiBvcGVuIFByaW50ZgogCiBsZXQgY2hlY2tfdW5pcXVlIGYgbCA9CkBAIC0zOSw3ICsz OSw3IEBACiAgICAgKGZ1biB4IC0+IAogICAgICAgIGxldCAoX2xvYywgaWQpID0gZiB4IGluCiAg ICAgICAgaWYgSGFzaHRibC5tZW0gdGJsIGlkIHRoZW4KLQkgU3RkcHAucmFpc2Vfd2l0aF9sb2Mg X2xvYworCSBMb2MucmFpc2UgX2xvYwogCSAgIChGYWlsdXJlICJ0aGlzIHRhZyBvciBsYWJlbCBp cyBub3QgdW5pcXVlIikKICAgICAgICBlbHNlIEhhc2h0YmwuYWRkIHRibCBpZCAoKSkKICAgICBs CkBAIC01OSwxNyArNTksMTcgQEAKIHR5cGUgZmllbGQgPSB7IGZpZWxkX2NhbWxfbmFtZSA6IHN0 cmluZzsKIAkgICAgICAgZmllbGRfanNvbl9uYW1lIDogc3RyaW5nOwogCSAgICAgICBmaWVsZF90 eXBlIDogdDsKLQkgICAgICAgZmllbGRfY2FtbF9sb2MgOiBUb2tlbi5mbG9jYXRpb247Ci0JICAg ICAgIGZpZWxkX2pzb25fbG9jIDogVG9rZW4uZmxvY2F0aW9uOworCSAgICAgICBmaWVsZF9jYW1s X2xvYyA6IExvYy50OworCSAgICAgICBmaWVsZF9qc29uX2xvYyA6IExvYy50OwogCSAgICAgICBv cHRpb25hbCA6IGJvb2w7Ci0JICAgICAgIGRlZmF1bHQgOiBNTGFzdC5leHByIG9wdGlvbjsKKwkg ICAgICAgZGVmYXVsdCA6IEFzdC5leHByIG9wdGlvbjsKIAkgICAgICAgaXNfbXV0YWJsZSA6IGJv b2wgfQogCiBhbmQgY29uc3RydWN0b3IgPSB7IGNvbnNfY2FtbF9uYW1lIDogc3RyaW5nOwogCQkg ICAgY29uc19qc29uX25hbWUgOiBzdHJpbmc7CiAJCSAgICBjb25zX2FyZ3MgOiB0IGxpc3Q7Ci0J CSAgICBjb25zX2NhbWxfbG9jIDogVG9rZW4uZmxvY2F0aW9uOwotCQkgICAgY29uc19qc29uX2xv YyA6IFRva2VuLmZsb2NhdGlvbiB9CisJCSAgICBjb25zX2NhbWxfbG9jIDogTG9jLnQ7CisJCSAg ICBjb25zX2pzb25fbG9jIDogTG9jLnQgfQogCiBhbmQgdHlwZV9leHByID0KICAgICBMaXN0IG9m IHQKQEAgLTkxLDcgKzkxLDcgQEAKICAgfCBSYXcKICAgfCBDdXN0b20gb2Ygc3RyaW5nCiAKLWFu ZCB0ID0gVG9rZW4uZmxvY2F0aW9uICogdHlwZV9leHByCithbmQgdCA9IExvYy50ICogdHlwZV9l eHByCiAKIGFuZCB0eXBlX2RlZiA9IHsgZGVmIDogdDsKIAkJIGlzX3ByZWRlZmluZWQgOiBib29s OwpAQCAtMTA2LDQzICsxMDYsNDcgQEAKICAgICAgIHwgQXJyYXkgeCAtPiA8OmN0eXA8IGFycmF5 ICRjb252ZXJ0IHgkID4+CiAgICAgICB8IE9wdGlvbiB4IC0+IDw6Y3R5cDwgb3B0aW9uICRjb252 ZXJ0IHgkID4+CiAgICAgICB8IE9iamVjdCBsIC0+IAotCSAgbGV0IG1sID0gTGlzdC5tYXAgKGZ1 biB4IC0+ICh4LmZpZWxkX2NhbWxfbmFtZSwKLQkJCQkgICAgICAgY29udmVydCB4LmZpZWxkX3R5 cGUpKSBsIGluCi0JICA8OmN0eXA8IDwgJGxpc3Q6bWwkID4gPj4KKwkgIGxldCBtbCA9IExpc3Qu Zm9sZF9yaWdodCAoZnVuIHggYWNjIC0+CisgICAgICAgICAgICA8OmN0eXA8ICRsaWQ6eC5maWVs ZF9jYW1sX25hbWUkIDogJGNvbnZlcnQgeC5maWVsZF90eXBlJCA7ICRhY2MkID4+KQorICAgICAg ICAgICAgbCA8OmN0eXA8Pj4gaW4KKwkgIDw6Y3R5cDwgPCAkbWwkID4gPj4KICAgICAgIHwgUmVj b3JkIHIgLT4gCiAJICBsZXQgbCA9IAotCSAgICBMaXN0Lm1hcCAoZnVuIHggLT4gKHguZmllbGRf Y2FtbF9sb2MsCi0JCQkJeC5maWVsZF9jYW1sX25hbWUsCi0JCQkJeC5pc19tdXRhYmxlLAotCQkJ CWNvbnZlcnQgeC5maWVsZF90eXBlKSkgciBpbgotCSAgPDpjdHlwPCB7ICRsaXN0OmwkIH0gPj4K KwkgICAgTGlzdC5mb2xkX3JpZ2h0IGJlZ2luIGZ1biB4IGFjYyAtPgorICAgICAgICAgICAgICBs ZXQgX2xvYyA9IHguZmllbGRfY2FtbF9sb2MgaW4KKyAgICAgICAgICAgICAgbGV0IHQgPSBjb252 ZXJ0IHguZmllbGRfdHlwZSBpbgorICAgICAgICAgICAgICBsZXQgdCA9IGlmIHguaXNfbXV0YWJs ZSB0aGVuIDw6Y3R5cDwgbXV0YWJsZSAkdCQgPj4gZWxzZSB0IGluCisgICAgICAgICAgICAgIDw6 Y3R5cDwgJGxpZDp4LmZpZWxkX2NhbWxfbmFtZSQgOiAkdCQ7ICRhY2MkID4+CisgICAgICAgICAg ICBlbmQgciA8OmN0eXA8Pj4gaW4KKwkgIDw6Y3R5cDwgeyAkbCQgfSA+PgogICAgICAgfCBIYXNo dGJsIHggLT4gPDpjdHlwPCBIYXNodGJsLnQgc3RyaW5nICRjb252ZXJ0IHgkID4+CiAgICAgICB8 IEFzc29jIHggLT4gPDpjdHlwPCBsaXN0IChzdHJpbmcgKiAkY29udmVydCB4JCkgPj4KICAgICAg IHwgVHVwbGUgbCAtPiAKIAkgIGxldCB0bCA9IExpc3QubWFwIGNvbnZlcnQgbCBpbgotCSAgPDpj dHlwPCAoICRsaXN0OnRsJCApID4+CisJICA8OmN0eXA8ICggJHR1cDpBc3QudHlTdGFfb2ZfbGlz dCB0bCQgKSA+PgogICAgICAgfCBQb2x5IGwgLT4gCiAJICBsZXQgcmZsID0gCi0JICAgIExpc3Qu bWFwIChmdW4gYyAtPgorCSAgICBMaXN0LmZvbGRfcmlnaHQgKGZ1biBjIGFjYyAtPgogCQkJbGV0 IG5hbWUgPSBjLmNvbnNfY2FtbF9uYW1lIGluCiAJCQltYXRjaCBjLmNvbnNfYXJncyB3aXRoCi0J CQkgICAgW10gLT4gTUxhc3QuUmZUYWcgKG5hbWUsIHRydWUsIFtdKQotCQkJICB8IFt4XSAtPiBN TGFzdC5SZlRhZyAobmFtZSwgZmFsc2UsIFtjb252ZXJ0IHhdKQorCQkJICAgIFtdIC0+IDw6Y3R5 cDwgYCRuYW1lJCB8ICRhY2MkID4+CisJCQkgIHwgW3hdIC0+IDw6Y3R5cDwgYCRuYW1lJCBvZiAk Y29udmVydCB4JCB8ICRhY2MkID4+CiAJCQkgIHwgXyAtPiBhc3NlcnQgZmFsc2UpCi0JICAgICAg bCBpbgotCSAgPDpjdHlwPCBbID0gJGxpc3Q6cmZsJCBdID4+CisJICAgICAgbCA8OmN0eXA8Pj4g aW4KKwkgIDw6Y3R5cDwgWyA9ICRyZmwkIF0gPj4KICAgICAgIHwgVmFyaWFudCB2IC0+IAogCSAg bGV0IGwgPSAKLQkgICAgTGlzdC5tYXAgCi0JICAgICAgKGZ1biB4IC0+CisJICAgIExpc3QuZm9s ZF9yaWdodAorCSAgICAgIChmdW4geCBhY2MgLT4KIAkJIGxldCBjYWwgPSBMaXN0Lm1hcCBjb252 ZXJ0IHguY29uc19hcmdzIGluCi0JCSAoeC5jb25zX2NhbWxfbG9jLCB4LmNvbnNfY2FtbF9uYW1l LCBjYWwpKQotCSAgICAgIHYgaW4KLQkgIDw6Y3R5cDwgWyAkbGlzdDpsJCBdID4+CisgICAgICAg ICAgICAgICAgIGxldCBfbG9jID0geC5jb25zX2NhbWxfbG9jIGluCisJCSA8OmN0eXA8ICR1aWQ6 eC5jb25zX2NhbWxfbmFtZSQgb2YgJGxpc3Q6Y2FsJCB8ICRhY2MkID4+KQorCSAgICAgIHYgPDpj dHlwPD4+IGluCisJICA8OmN0eXA8IFsgJGwkIF0gPj4KICAgICAgIHwgTmFtZSB4IC0+IAogCSAg aWYgU3RyaW5nTWFwLm1lbSB4IG5hbWVzIHRoZW4gPDpjdHlwPCAkbGlkOngkID4+CiAJICBlbHNl Ci0JICAgIFN0ZHBwLnJhaXNlX3dpdGhfbG9jIF9sb2MgCisJICAgIExvYy5yYWlzZSBfbG9jIAog CSAgICAgIChGYWlsdXJlICgidHlwZSBuYW1lICIgXiB4IF4gCiAJCQkiIGlzIHVuZGVmaW5lZCBv ciBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5 cGUgLi4uIGFuZCAuLi4nIGJsb2NrIikpCkBAIC0xNTUsMTcgKzE1OSwxMyBAQAogICAgICAgfCBD dXN0b20gcyAtPiA8OmN0eXA8ICR1aWQ6cyQgLiB0ID4+IGluCiAKICAgbGV0IHRkbCA9IAotICAg IG9wdG1hcCAKLSAgICAgIChmdW4gKG5hbWUsIHgpIC0+Ci0JIGlmIHguaXNfcHJlZGVmaW5lZCB0 aGVuIE5vbmUKLQkgZWxzZQotCSAgIGxldCBjdHlwID0gY29udmVydCB4LmRlZiBpbgotCSAgIFNv bWUgKG5hbWUsIFtdLCBjdHlwLCBbXSkpCi0gICAgICBsIGluCi0gIGlmIHRkbCA8PiBbXSB0aGVu Ci0gICAgPDpzdHJfaXRlbTwgdHlwZSAkbGlzdDp0ZGwkID4+Ci0gIGVsc2UKLSAgICA8OnN0cl9p dGVtPCBkZWNsYXJlIGVuZCA+PgorICAgIExpc3QuZm9sZF9yaWdodCBiZWdpbiBmdW4gKChfbG9j LCBuYW1lKSwgeCkgYWNjIC0+CisgICAgICBpZiB4LmlzX3ByZWRlZmluZWQgdGhlbiBhY2MKKyAg ICAgIGVsc2UKKyAgICAgICAgbGV0IGRjbCA9IEFzdC5UeURjbCAoX2xvYywgbmFtZSwgW10sIGNv bnZlcnQgeC5kZWYsIFtdKSBpbgorICAgICAgICA8OmN0eXA8ICRkY2wkIGFuZCAkYWNjJCA+Pgor ICAgIGVuZCBsIDw6Y3R5cDw+PiBpbgorICA8OnN0cl9pdGVtPCB0eXBlICR0ZGwkID4+CiAKIGxl dCBudW1iZXJlZF9saXN0IGwgPQogICBBcnJheS50b19saXN0CkBAIC0xNzQsOCArMTc0LDggQEAK ICAgICAgICAoQXJyYXkub2ZfbGlzdCBsKSkKIAogbGV0IGV0YV9leHBhbmQgPSBmdW5jdGlvbgot ICAgICg8OmV4cHI8IGZ1biBbICRsaXN0Ol8kIF0gPj4pIGFzIGYgLT4gZgotICB8IGUgLT4gbGV0 IF9sb2MgPSBNTGFzdC5sb2Nfb2ZfZXhwciBlIGluICg8OmV4cHI8IGZ1biB4IC0+ICRlJCB4ID4+ KQorICAgIDw6ZXhwcjwgZnVuIFsgJF8kIF0gPj4gYXMgZiAtPiBmCisgIHwgZSAtPiBsZXQgX2xv YyA9IEFzdC5sb2Nfb2ZfZXhwciBlIGluIDw6ZXhwcjwgZnVuIHggLT4gJGUkIHggPj4KIAogbGV0 IG1ha2Vfb2Zqc29uIF9sb2MgbCA9CiAgIGxldCBicm93c2UgX2xvYyBmID0gPDpleHByPCBKc29u X3R5cGUuQnJvd3NlLiRsaWQ6ZiQgPj4gaW4KQEAgLTIwOSwxMCArMjA5LDEwIEBACiAJICAgICAg KGZ1biAoKF9sb2MsIF8pLCBuYW1lKSB0bCAtPiA8OnBhdHQ8IFsgJGxpZDpuYW1lJCA6OiAkdGwk IF0gPj4pIAogCSAgICAgIG5sIDw6cGF0dDwgW10gPj4gaW4KIAkgIGxldCBlbCA9IAotCSAgICBM aXN0Lm1hcCAoZnVuICgoX2xvYywgXykgYXMgeCwgbmFtZSkgLT4KLQkJCTw6ZXhwcjwgJGNvbnZl cnQgeCQgJGxpZDpuYW1lJCA+PikKLQkgICAgICBubCBpbgotCSAgPDpleHByPCBmdW4gWyBKc29u X3R5cGUuQXJyYXkgWyAkbGlzdDpwbCQgXSAtPiAoICRsaXN0OmVsJCApCisJICAgIExpc3QuZm9s ZF9yaWdodCAoZnVuICgoX2xvYywgXykgYXMgeCwgbmFtZSkgYWNjIC0+CisJCQk8OmV4cHI8ICRj b252ZXJ0IHgkICRsaWQ6bmFtZSQsICRhY2MkID4+KQorCSAgICAgIG5sIDw6ZXhwcjw+PiBpbgor CSAgPDpleHByPCBmdW4gWyBKc29uX3R5cGUuQXJyYXkgJHBsJCAtPiAoICR0dXA6ZWwkICkKIAkJ ICAgICAgfCBKc29uX3R5cGUuQXJyYXkgXyBhcyB4IC0+CiAJCQkgIF9fanNvbl9zdGF0aWNfZXJy b3IgeAogCQkJICAgICJ3cm9uZyBudW1iZXIgb2YgZWxlbWVudHMgaW4gSlNPTiBhcnJheSIKQEAg LTIzNCwxNyArMjM0LDEzIEBACiAKICAgIGFuZCBjb252ZXJ0X29iamVjdCBfbG9jIGwgPQogICAg ICBsZXQgcGVsID0gY29udmVydF9maWVsZF9saXN0IF9sb2MgbCBpbgotICAgICBsZXQgbWwgPSAK LSAgICAgICBMaXN0Lm1hcCAKLQkgKGZ1biB4IC0+IAorICAgICBsZXQgbWV0aG9kcyA9IAorICAg ICAgIExpc3QuZm9sZF9yaWdodAorCSAoZnVuIHggYWNjIC0+CiAJICAgIGxldCBuYW1lID0geC5m aWVsZF9jYW1sX25hbWUgaW4KLQkgICAgPDpjbGFzc19zdHJfaXRlbTwgbWV0aG9kICRuYW1lJCA9 ICRsaWQ6bmFtZSQgPj4pCi0JIGwgaW4KLSAgICAgbGV0IG9iaiA9IAotICAgICAgICgqIDw6ZXhw cjwgb2JqZWN0ICRsaXN0Om1sJCBlbmQgPj4gKikKLSAgICAgICBNTGFzdC5FeE9iaiAoX2xvYywg Tm9uZSwgbWwpCi0gICAgIGluCi0gICAgIGV2YWxfd2l0aF90YmwgX2xvYyA8OmV4cHI8IGxldCAk bGlzdDpwZWwkIGluICRvYmokID4+CisgICAgICAgICAgICA8OmNsYXNzX3N0cl9pdGVtPCBtZXRo b2QgJG5hbWUkID0gJGxpZDpuYW1lJCA7ICRhY2MkID4+KQorCSBsIDw6Y2xhc3Nfc3RyX2l0ZW08 Pj4gaW4KKyAgICAgZXZhbF93aXRoX3RibCBfbG9jIDw6ZXhwcjwgbGV0ICRsaXN0OnBlbCQgaW4g b2JqZWN0ICRtZXRob2RzJCBlbmQgPj4KIAogICBhbmQgY29udmVydF9yZWNvcmQgX2xvYyByID0K ICAgICAgbGV0IHBlbCA9IGNvbnZlcnRfZmllbGRfbGlzdCBfbG9jIHIgaW4KQEAgLTI1OSw4ICsy NTUsNyBAQAogCSAgICAgIGRlZmF1bHQgPSBkZWZhdWx0IH0gLT4KIAkgIGxldCBlMSA9IAogCSAg ICBsZXQgZiA9IGlmIG9wdGlvbmFsIHRoZW4gImZpZWxkeCIgZWxzZSAiZmllbGQiIGluCi0JICAg IDw6ZXhwcjwgCi0JICAoSnNvbl90eXBlLkJyb3dzZS4kbGlkOmYkIHRibCAkc3RyOmpzb25fbmFt ZSQpID4+IGluCisJICAgIDw6ZXhwcjwgSnNvbl90eXBlLkJyb3dzZS4kbGlkOmYkIHRibCAkc3Ry Ompzb25fbmFtZSQgPj4gaW4KIAkgIGxldCBlMiA9CiAJICAgIG1hdGNoIGRlZmF1bHQgd2l0aAog CQlTb21lIGUgLT4gCkBAIC0yNjksMzAgKzI2NCwyOCBAQAogCQkgICAgICAgWyBKc29uX3R5cGUu TnVsbCAtPiAkZSQKIAkJICAgICAgIHwgeCAtPiAkY29udmVydCB4JCB4IF0gPj4pCiAJICAgICAg fCBOb25lIC0+IDw6ZXhwcjwgJGNvbnZlcnQgeCQgJGUxJCA+PiBpbgotCSAgCi0JICAoPDpwYXR0 PCAkbGlkOm5hbWUkID4+LCBlMikpCisKKwkgIDw6YmluZGluZzwgJGxpZDpuYW1lJCA9ICRlMiQg Pj4pCiAgICAgICAgbAogCiAgIGFuZCBjb252ZXJ0X3ZhcmlhbnRzIG1ha2VfY29ucyBfbG9jIGwg PQogICAgIGxldCBsMCwgbDEgPQogICAgICAgTGlzdC5wYXJ0aXRpb24gKGZ1biB4IC0+IHguY29u c19hcmdzID0gW10pIGwgaW4KICAgICBsZXQgcHdlbDAgPQotICAgICAgTGlzdC5tYXAKKyAgICAg IExpc3QuZm9sZF9yaWdodAogCShmdW4geyBjb25zX2NhbWxfbmFtZSA9IG5hbWU7Ci0JICAgICAg IGNvbnNfanNvbl9uYW1lID0ganNvbl9uYW1lIH0gLT4KLQkgICAoPDpwYXR0PCAkc3RyOmpzb25f bmFtZSQgPj4sIAotCSAgICBOb25lLAotCSAgICBtYWtlX2NvbnMgX2xvYyBuYW1lKSkKLQlsMCBp bgorCSAgICAgICBjb25zX2pzb25fbmFtZSA9IGpzb25fbmFtZSB9IGFjYyAtPgorCSAgIDw6bWF0 Y2hfY2FzZTwgJHN0cjpqc29uX25hbWUkIC0+ICRtYWtlX2NvbnMgX2xvYyBuYW1lJCB8ICRhY2Mk ID4+KQorCWwwIDw6bWF0Y2hfY2FzZTw+PiBpbgogICAgIGxldCBwd2VsMSA9Ci0gICAgICBMaXN0 Lm1hcAorICAgICAgTGlzdC5mb2xkX3JpZ2h0CiAJKGZ1biB7IGNvbnNfY2FtbF9uYW1lID0gbmFt ZTsKIAkgICAgICAgY29uc19qc29uX25hbWUgPSBqc29uX25hbWU7Ci0JICAgICAgIGNvbnNfYXJn cyA9IGFyZ3MgfSAtPgorCSAgICAgICBjb25zX2FyZ3MgPSBhcmdzIH0gYWNjIC0+CiAJICAgbGV0 IGFyZ25hbWVzID0gbnVtYmVyZWRfbGlzdCBhcmdzIGluCiAJICAgbGV0IGxpc3RfcGF0dCA9CiAJ ICAgICBMaXN0LmZvbGRfcmlnaHQgCi0JICAgICAgIChmdW4gKGFyZywgcykgbCAtPiAKKwkgICAg ICAgKGZ1biAoXywgcykgbCAtPiAKIAkJICA8OnBhdHQ8IFsgJGxpZDpzJCA6OiAkbCQgXSA+PikK IAkgICAgICAgYXJnbmFtZXMgPDpwYXR0PCBbXSA+PiBpbgogCSAgIGxldCBlID0KQEAgLTMwMCwy NCArMjkzLDIxIEBACiAJICAgICAgIChmdW4gY29ucyAoYXJnLCBzKSAtPiAKIAkJICA8OmV4cHI8 ICRjb25zJCAoJGNvbnZlcnQgYXJnJCAkbGlkOnMkKSA+PikKIAkgICAgIChtYWtlX2NvbnMgX2xv YyBuYW1lKSBhcmduYW1lcyBpbgotCSAgICg8OnBhdHQ8ICgkc3RyOmpzb25fbmFtZSQsICRsaXN0 X3BhdHQkKSA+PiwgCi0JICAgIE5vbmUsIAotCSAgICBlKSkKLQlsMSBpbgotICAgIGxldCBmdWxs X3B3ZWwgcHdlbCA9Ci0gICAgICBwd2VsIEAgWyA8OnBhdHQ8IF8gPj4sIE5vbmUsIAotCSAgICAg ICA8OmV4cHI8IF9fanNvbl9zdGF0aWNfZXJyb3IgeAotICAgICAgICAgICAgICAgICAiaW52YWxp ZCB2YXJpYW50IG5hbWUgb3IgXAotICAgICAgICAgICAgICAgICAgd3JvbmcgbnVtYmVyIG9mIGFy Z3VtZW50cyIgPj4gXQorCSAgIDw6bWF0Y2hfY2FzZTwgKCRzdHI6anNvbl9uYW1lJCwgJGxpc3Rf cGF0dCQpIC0+ICRlJCB8ICRhY2MkID4+KQorCWwxIDw6bWF0Y2hfY2FzZTw+PiBpbgorICAgIGxl dCBkZWZhdWx0X2Nhc2UgPQorICAgICAgPDptYXRjaF9jYXNlPCBfIC0+IF9fanNvbl9zdGF0aWNf ZXJyb3IgeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFyaWFudCBuYW1l IG9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cm9uZyBudW1iZXIgb2YgYXJndW1l bnRzIiA+PgogICAgIGluCiAgICAgCiAgICAgKDw6ZXhwcjwgCiAgICAgIGZ1bgogCSBbIEpzb25f dHlwZS5TdHJpbmcgcyBhcyB4IC0+IAotCSAgICAgbWF0Y2ggcyB3aXRoIFsgJGxpc3Q6ZnVsbF9w d2VsIHB3ZWwwJCBdCisJICAgICBtYXRjaCBzIHdpdGggWyAkcHdlbDAkIHwgJGRlZmF1bHRfY2Fz ZSQgXQogCSAgICAgICB8IEpzb25fdHlwZS5BcnJheSAKIAkJICAgWyBKc29uX3R5cGUuU3RyaW5n IHMgOjogKFsgXyA6OiBfIF0gYXMgYXJncykgXSBhcyB4IC0+IAotCQkgICBtYXRjaCAocywgYXJn cykgd2l0aCBbICRsaXN0OmZ1bGxfcHdlbCBwd2VsMSQgXQorCQkgICBtYXRjaCAocywgYXJncykg d2l0aCBbICRwd2VsMSQgfCAkZGVmYXVsdF9jYXNlJCBdCiAJICAgICAgIHwgeCAtPiBfX2pzb25f c3RhdGljX2Vycm9yIHgKIAkJICAgIm5vdCBhYmxlIHRvIHJlYWQgdGhpcyBhcyBcCiAgICAgICAg ICAgICAgICAgICAgIGEgdmFyaWFudCIgXQpAQCAtMzQzLDE4ICszMzMsMTYgQEAKICAgICAgIEpz b25fdHlwZS5qc29uX2Vycm9yIChtc2cgXiAiOlxuIiBeIG9ial9zdHJpbmcpID4+IGluCiAKICAg bGV0IGRlZnMgPSAKLSAgICBvcHRtYXAKLSAgICAgIChmdW4gKChfbG9jLCBuYW1lKSwgeCkgLT4g Ci0JICgqaWYgeC5pc19wcml2YXRlIHRoZW4gTm9uZQorICAgIExpc3QuZm9sZF9yaWdodAorICAg ICAgKGZ1biAoKF9sb2MsIG5hbWUpLCB4KSBhY2MgLT4gCisJICgqaWYgeC5pc19wcml2YXRlIHRo ZW4gYWNjCiAJIGVsc2UqKQogCSAgIGxldCBmbmFtZSA9IG5hbWUgXiAiX29mX2pzb24iIGluCi0J ICAgU29tZSAoPDpwYXR0PCAoICRsaWQ6Zm5hbWUkIDogSnNvbl90eXBlLnQgLT4gJGxpZDpuYW1l JCApID4+LCAKLQkJIGV0YV9leHBhbmQgKGNvbnZlcnQgeC5kZWYpKSkgbCBpbgotICBpZiBkZWZz ID0gW10gdGhlbiAKLSAgICA8OnN0cl9pdGVtPCBkZWNsYXJlIGVuZCA+PgotICBlbHNlCi0gICA8 OnN0cl9pdGVtPCBkZWNsYXJlICRlcnJvciQ7IHZhbHVlIHJlYyAkbGlzdDpkZWZzJDsgZW5kID4+ Ci0KKyAgICAgICAgICAgPDpiaW5kaW5nPCAoICRsaWQ6Zm5hbWUkIDogSnNvbl90eXBlLnQgLT4g JGxpZDpuYW1lJCApID0gCisgICAgICAgICAgICAgICAgICAgICAgJGV0YV9leHBhbmQgKGNvbnZl cnQgeC5kZWYpJCBhbmQgJGFjYyQgPj4pCisgICAgICBsIDw6YmluZGluZzw+PgorICBpbgorICAg IDw6c3RyX2l0ZW08ICRlcnJvciQ7IHZhbHVlIHJlYyAkZGVmcyQgPj4KIAogbGV0IG1ha2VfdG9q c29uIF9sb2MgbCA9CiAgIGxldCBidWlsZCBfbG9jIHMgPSA8OmV4cHI8IEpzb25fdHlwZS5CdWls ZC4gJGxpZDpzJCA+PiBpbgpAQCAtMzg1LDQ0ICszNzMsNDAgQEAKIAkgICAgICAgICgoTGlzdC5t YXAgKGZ1biAoa2V5LCBkYXRhKSAtPiAoa2V5LCAkY29udmVydCB4JCBkYXRhKSkpIHgpID4+CiAg ICAgICB8IFR1cGxlIGwgLT4KIAkgIGxldCBubCA9IG51bWJlcmVkX2xpc3QgbCBpbgotCSAgbGV0 IHBsID0gTGlzdC5tYXAgKGZ1biAoXywgbmFtZSkgLT4gPDpwYXR0PCAkbGlkOm5hbWUkID4+KSBu bCBpbgorCSAgbGV0IHBsID0gTGlzdC5mb2xkX3JpZ2h0IAorICAgICAgICAgICAgICAgICAgICAo ZnVuIChfLCBuYW1lKSBhY2MgLT4gPDpwYXR0PCAkbGlkOm5hbWUkLCAkYWNjJCA+PikKKyAgICAg ICAgICAgICAgICAgICAgbmwgPDpwYXR0PD4+IGluCiAJICBsZXQgYSA9IExpc3QuZm9sZF9yaWdo dCAKIAkJICAgIChmdW4gKHgsIG5hbWUpIHRsIC0+IAogCQkgICAgICAgPDpleHByPCBbICRjb252 ZXJ0IHgkICRsaWQ6bmFtZSQgOjogJHRsJCBdID4+KQogCQkgICAgbmwgPDpleHByPCBbXSA+PiBp bgotCSAgPDpleHByPCBmdW4gWyAoICRsaXN0OnBsJCApIC0+IEpzb25fdHlwZS5BcnJheSAkYSQg XSA+PgorCSAgPDpleHByPCBmdW4gWyAoICR0dXA6cGwkICkgLT4gSnNvbl90eXBlLkFycmF5ICRh JCBdID4+CiAgICAgICB8IFBvbHkgbCAtPiAKLQkgIGxldCBwd2VsID0KKwkgIGxldCBtYXRjaF9j YXNlcyA9CiAJICAgIExpc3QubWFwCiAJICAgICAgKGZ1biB7IGNvbnNfY2FtbF9uYW1lID0gbmFt ZTsKIAkJICAgICBjb25zX2pzb25fbmFtZSA9IGpzb25fbmFtZTsKIAkJICAgICBjb25zX2FyZ3Mg PSBhcmdzIH0gLT4KIAkJIG1hdGNoIGFyZ3Mgd2l0aAogCQkgICAgIFtdIC0+IAotCQkgICAgICAg KDw6cGF0dDwgYCAkbmFtZSQgPj4sIAotCQkJTm9uZSwKLQkJCTw6ZXhwcjwgSnNvbl90eXBlLlN0 cmluZyAkc3RyOmpzb25fbmFtZSQgPj4pCisJCSAgICAgICA8Om1hdGNoX2Nhc2U8IGAkbmFtZSQg LT4gSnNvbl90eXBlLlN0cmluZyAkc3RyOmpzb25fbmFtZSQgPj4KIAkJICAgfCBbeF0gLT4KLQkJ ICAgICAgICg8OnBhdHQ8IGAgJG5hbWUkIGFyZyA+PiwgCi0JCQlOb25lLCAKLQkJCTw6ZXhwcjwK KwkJICAgICAgIDw6bWF0Y2hfY2FzZTwgYCRuYW1lJCBhcmcgLT4KIAkJCUpzb25fdHlwZS5BcnJh eSAKIAkJCSAgWyBKc29uX3R5cGUuU3RyaW5nICRzdHI6anNvbl9uYW1lJDsKLQkJCSAgICAkY29u dmVydCB4JCBhcmcgXSA+PikKKwkJCSAgICAkY29udmVydCB4JCBhcmcgXSA+PgogCQkgICB8IF8g LT4gYXNzZXJ0IGZhbHNlKQogCSAgICAgIGwgaW4KLQkgIDw6ZXhwcjwgZnVuIFsgJGxpc3Q6cHdl bCQgXSA+PgorCSAgPDpleHByPCBmdW4gWyAkbGlzdDptYXRjaF9jYXNlcyQgXSA+PgogICAgICAg fCBWYXJpYW50IHYgLT4gCi0JICBsZXQgcHdlbCA9CisJICBsZXQgbWF0Y2hfY2FzZXMgPQogCSAg ICBMaXN0Lm1hcAogCSAgICAgIChmdW4geyBjb25zX2NhbWxfbmFtZSA9IG5hbWU7CiAJCSAgICAg Y29uc19qc29uX25hbWUgPSBqc29uX25hbWU7CiAJCSAgICAgY29uc19hcmdzID0gYXJncyB9IC0+ CiAJCSBtYXRjaCBhcmdzIHdpdGgKIAkJICAgICBbXSAtPiAKLQkJICAgICAgICg8OnBhdHQ8ICR1 aWQ6bmFtZSQgPj4sIAotCQkJTm9uZSwKLQkJCTw6ZXhwcjwgSnNvbl90eXBlLlN0cmluZyAkc3Ry Ompzb25fbmFtZSQgPj4pCisJCSAgICAgICA8Om1hdGNoX2Nhc2U8ICR1aWQ6bmFtZSQgLT4gSnNv bl90eXBlLlN0cmluZyAkc3RyOmpzb25fbmFtZSQgPj4KIAkJICAgfCBsIC0+CiAJCSAgICAgICBs ZXQgYXJncyA9IG51bWJlcmVkX2xpc3QgbCBpbgogCQkgICAgICAgbGV0IHAgPQpAQCAtNDM0LDEz ICs0MTgsMTEgQEAKIAkJCSAgIChmdW4gKHgsIHMpIGwgLT4gCiAJCQkgICAgICA8OmV4cHI8IFsg JGNvbnZlcnQgeCQgJGxpZDpzJCA6OiAkbCQgXSA+PikKIAkJCSAgIGFyZ3MgPDpleHByPCBbXSA+ PiBpbgotCQkgICAgICAgKHAsIAotCQkJTm9uZSwgCi0JCQk8OmV4cHI8CisJCSAgICAgICA8Om1h dGNoX2Nhc2U8ICRwJCAtPgogCQkJSnNvbl90eXBlLkFycmF5IAotCQkJICBbIEpzb25fdHlwZS5T dHJpbmcgJHN0cjpqc29uX25hbWUkIDo6ICRlJCBdID4+KSkKKwkJCSAgWyBKc29uX3R5cGUuU3Ry aW5nICRzdHI6anNvbl9uYW1lJCA6OiAkZSQgXSA+PikKIAkgICAgICB2IGluCi0JICA8OmV4cHI8 IGZ1biBbICRsaXN0OnB3ZWwkIF0gPj4KKwkgIDw6ZXhwcjwgZnVuIFsgJGxpc3Q6bWF0Y2hfY2Fz ZXMkIF0gPj4KICAgICAgIHwgTmFtZSB4IC0+IDw6ZXhwcjwgJGxpZDogImpzb25fb2ZfIiBeIHgk ID4+CiAgICAgICB8IFN0cmluZyAtPiBidWlsZCBfbG9jICJzdHJpbmciCiAgICAgICB8IEJvb2wg LT4gYnVpbGQgX2xvYyAiYm9vbCIKQEAgLTQ2MywyNSArNDQ1LDI1IEBACiAgIGluCiAKICAgbGV0 IGRlZnMgPSAKLSAgICBMaXN0Lm1hcAotICAgICAgKGZ1biAoKF9sb2MsIG5hbWUpLCB4KSAtPiAK KyAgICBMaXN0LmZvbGRfcmlnaHQKKyAgICAgIChmdW4gKChfbG9jLCBuYW1lKSwgeCkgYWNjIC0+ IAogCSBsZXQgZm5hbWUgPSAianNvbl9vZl8iIF4gbmFtZSBpbgotCSAoPDpwYXR0PCAoICRsaWQ6 Zm5hbWUkIDogJGxpZDpuYW1lJCAtPiBKc29uX3R5cGUudCApID4+LCAKLQkgIGV0YV9leHBhbmQg KGNvbnZlcnQgeC5kZWYpKSkKLSAgICAgIGwgaW4KLSAgPDpzdHJfaXRlbTwgdmFsdWUgcmVjICRs aXN0OmRlZnMkID4+CisJIDw6YmluZGluZzwgKCAkbGlkOmZuYW1lJCA6ICRsaWQ6bmFtZSQgLT4g SnNvbl90eXBlLnQgKSA9CisJICAgICAgICAgICAgJGV0YV9leHBhbmQgKGNvbnZlcnQgeC5kZWYp JCBhbmQgJGFjYyQgPj4pCisgICAgICBsIDw6YmluZGluZzw+PiBpbgorICA8OnN0cl9pdGVtPCB2 YWx1ZSByZWMgJGRlZnMkID4+CiAKIAogbGV0IGV4cGFuZF90eXBlZGVmcyBfbG9jIGwgPQotICBj aGVja191bmlxdWUgKGZ1biAobmFtZSwgeCkgLT4gbmFtZSkgbDsKKyAgY2hlY2tfdW5pcXVlIChm dW4gKG5hbWUsIF8pIC0+IG5hbWUpIGw7CiAgIGxldCBuYW1lcyA9IAogICAgIExpc3QuZm9sZF9s ZWZ0IAotICAgICAgKGZ1biBtICgoKF9sb2MsIG5hbWUpLCB4KSBhcyBkYXRhKSAtPiBTdHJpbmdN YXAuYWRkIG5hbWUgZGF0YSBtKQorICAgICAgKGZ1biBtICgoKF9sb2MsIG5hbWUpLCBfKSBhcyBk YXRhKSAtPiBTdHJpbmdNYXAuYWRkIG5hbWUgZGF0YSBtKQogICAgICAgU3RyaW5nTWFwLmVtcHR5 IGwgaW4KICAgbGV0IHR5cGVkZWYgPSBtYWtlX3R5cGVkZWYgX2xvYyBuYW1lcyBsIGluCiAgIGxl dCBvZmpzb24gPSBtYWtlX29manNvbiBfbG9jIGwgaW4KICAgbGV0IHRvanNvbiA9IG1ha2VfdG9q c29uIF9sb2MgbCBpbgotICA8OnN0cl9pdGVtPCBkZWNsYXJlICR0eXBlZGVmJDsgJG9manNvbiQ7 ICR0b2pzb24kOyBlbmQgPj4KKyAgPDpzdHJfaXRlbTwgJHR5cGVkZWYkOyAkb2Zqc29uJDsgJHRv anNvbiQgPj4KIAogbGV0IG8yYiA9IGZ1bmN0aW9uIE5vbmUgLT4gZmFsc2UgfCBfIC0+IHRydWUK IApAQCAtNDkzLDI0ICs0NzUsMjUgQEAKICAgTGlzdC5pdGVyIChmdW4gcyAtPiBIYXNodGJsLmFk ZCB0YmwgcyAoKSkgbDsKICAgSGFzaHRibC5tZW0gdGJsCiAKLW9wZW4gUGNhbWwKLQogbGV0IGxp c3Rfb2Zfb3B0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgeCAtPiBbeF0KIGxldCBsaXN0 X29mX29wdGxpc3QgPSBmdW5jdGlvbiBOb25lIC0+IFtdIHwgU29tZSB4IC0+IHgKIAogbGV0IGNo ZWNrX21ldGhvZHMgbCA9CiAgIExpc3QuaXRlciAoZnVuIHggLT4KIAkgICAgICAgaWYgeC5pc19t dXRhYmxlIHRoZW4KLQkJIFN0ZHBwLnJhaXNlX3dpdGhfbG9jIHguZmllbGRfY2FtbF9sb2MgCisJ CSBMb2MucmFpc2UgeC5maWVsZF9jYW1sX2xvYyAKIAkJICAgKEZhaWx1cmUgIm9iamVjdCBmaWVs ZHMgY2Fubm90IGJlIG1hZGUgbXV0YWJsZSIpKSBsCiAKIGxldCBzdHJpbmdfYXNzb2MgX2xvYyA9 IGZ1bmN0aW9uCiAgICAgKF9sb2MsIFR1cGxlIFsgKF8sIFN0cmluZyk7IChfLCB4KSBdKSAtPiAo X2xvYywgeCkKICAgfCAoXywgXykgLT4gCi0gICAgICBTdGRwcC5yYWlzZV93aXRoX2xvYyBfbG9j CisgICAgICBMb2MucmFpc2UgX2xvYwogCShGYWlsdXJlICJtdXN0IGJlIG9mIHRoZSBmb3JtIChz dHJpbmcgKiAuLi4pIGFzc29jIikKIAotRVhURU5ECitvcGVuIFN5bnRheAorbGV0IGV2YWxfc3Ry aW5nIHMgPSBDYW1scDQuU3RydWN0LlRva2VuLkV2YWwuc3RyaW5nIH5zdHJpY3Q6KCkgcworCitF WFRFTkQgR3JhbQogICBHTE9CQUw6IHN0cl9pdGVtOwogICBzdHJfaXRlbTogTEVWRUwgInRvcCIg WwogICAgIFsgInR5cGUiOyBMSURFTlQgImpzb24iOyAKQEAgLTUyMCw3ICs1MDMsNyBAQAogICB0 eXBlX2JpbmRpbmc6IFsKICAgICBbIG5hbWUgPSBbIHMgPSBMSURFTlQgLT4gCiAJCSBpZiBpc19y ZXNlcnZlZCBzIHRoZW4KLQkJICAgU3RkcHAucmFpc2Vfd2l0aF9sb2MgX2xvYyAKKwkJICAgTG9j LnJhaXNlIF9sb2MgCiAJCSAgICAgKEZhaWx1cmUgKCJ5b3UgY2FuJ3QgdXNlICciIF4gcyBeICIn IGFzIGEgdHlwZSBuYW1lIikpCiAJCSBlbHNlIChfbG9jLCBzKSBdOyAKICAgICAgICI9IjsKQEAg LTU0OSw3ICs1MzIsNyBAQAogICAgIFsgbCA9IAogCUxJU1QxIFsgaWQgPSBbIGlkID0gVUlERU5U IC0+IChfbG9jLCBpZCkgXTsgCiAJCWxhYmVsID0gT1BUIFsgcyA9IFNUUklORyAtPiAKLQkJCQko X2xvYywgVG9rZW4uZXZhbF9zdHJpbmcgX2xvYyBzKSBdOworCQkJCShfbG9jLCBldmFsX3N0cmlu ZyBzKSBdOwogCQl0eXAgPSBPUFQgWyAib2YiOwogCQkJICAgIHggPSBMSVNUMSB0eXBlX2V4cHIg TEVWRUwgInNpbXBsZSIgCiAJCQkJU0VQICIqIiAtPiB4IF0gLT4gCkBAIC01ODIsNyArNTY1LDYg QEAKICAgICB8ICIoIjsgTElERU5UICJzdHJpbmciOyAiLCI7IHggPSB0eXBlX2V4cHI7ICIpIjsg CiAgICAgICBVSURFTlQgIkhhc2h0YmwiOyAiLiI7IExJREVOVCAidCIgLT4gCiAJKF9sb2MsIEhh c2h0YmwgeCkKLSAgICB8IG5hbWUgPSBMSURFTlQgLT4gKF9sb2MsIE5hbWUgbmFtZSkKICAgICB8 IExJREVOVCAic3RyaW5nIiAtPiAoX2xvYywgU3RyaW5nKQogICAgIHwgTElERU5UICJib29sIiAt PiAoX2xvYywgQm9vbCkKICAgICB8IExJREVOVCAiaW50IiAtPiAoX2xvYywgSW50KQpAQCAtNTkw LDYgKzU3Miw3IEBACiAgICAgfCBMSURFTlQgIm51bWJlciIgLT4gKF9sb2MsIE51bWJlcikKICAg ICB8IFsgVUlERU5UICJKc29uX3R5cGUiOyAiLiI7IExJREVOVCAianNvbl90eXBlIgogICAgICAg fCBMSURFTlQgImpzb25fdHlwZSIgXSAtPiAoX2xvYywgUmF3KQorICAgIHwgbmFtZSA9IExJREVO VCAtPiAoX2xvYywgTmFtZSBuYW1lKQogICAgIHwgbW9kdWxlX25hbWUgPSBVSURFTlQ7ICIuIjsg TElERU5UICJ0IiAtPiAKIAlpZiBtb2R1bGVfbmFtZSA9ICJKc29uX3R5cGUiIHRoZW4gKF9sb2Ms IFJhdykKIAllbHNlIChfbG9jLCBDdXN0b20gbW9kdWxlX25hbWUpIF0KQEAgLTU5Nyw5ICs1ODAs OSBAQAogCiAgIHBvbHltb3JwaGljX3ZhcmlhbnRzOiBbCiAgICAgWyBsID0gCi0JTElTVDEgWyAi YCI7IGlkID0gWyBpZCA9IFsgTElERU5UIHwgVUlERU5UIF0gLT4gKF9sb2MsIGlkKSBdOyAKKyAg ICAgICAgTElTVDEgWyAiYCI7IGlkID0gWyBgKExJREVOVCBpZCB8IFVJREVOVCBpZCkgLT4gKF9s b2MsIGlkKSBdOyAKIAkJbGFiZWwgPSBPUFQgWyBzID0gU1RSSU5HIC0+IAotCQkJCShfbG9jLCBU b2tlbi5ldmFsX3N0cmluZyBfbG9jIHMpIF07CisJCQkJKF9sb2MsIGV2YWxfc3RyaW5nIHMpIF07 CiAJCXR5cCA9IE9QVCBbICJvZiI7IHggPSB0eXBlX2V4cHIgLT4geCBdIC0+IAogCQkgIGxldCBp ZCcgPSB1bm9wdCBpZCBsYWJlbCBpbgogCQkgIHsgY29uc19jYW1sX2xvYyA9IGZzdCBpZDsKQEAg LTYzNiw5ICs2MTksOSBAQAogCiAgIG1ldGhvZF9sYWJlbDogWwogICAgIFsgaWRfb3B0ID0gWyBp ZCA9IExJREVOVCAtPiAoKF9sb2MsIGlkKSwgZmFsc2UpCi0JICAgICAgIHwgaWQgPSBRVUVTVElP TklERU5UIC0+ICgoX2xvYywgaWQpLCB0cnVlKSBdOyAKKyAgICAgICAgICAgICAgIHwgIj8iOyBp ZCA9IExJREVOVCAtPiAoKF9sb2MsIGlkKSwgdHJ1ZSkgXTsgCiAgICAgICBsYWJlbCA9IE9QVCBb IHMgPSBTVFJJTkcgLT4gCi0JCSAgICAgIChfbG9jLCBUb2tlbi5ldmFsX3N0cmluZyBfbG9jIHMp IF07CisJCSAgICAgIChfbG9jLCBldmFsX3N0cmluZyBzKSBdOwogICAgICAgIjoiIC0+IChpZF9v cHQsIGxhYmVsKQogICAgIHwgaWQgPSBPUFRMQUJFTCAtPiAoKChfbG9jLCBpZCksIHRydWUpLCBO b25lKSBdCiAgIF07Cg== ------=_Part_36253_17904398.1174855359817 Content-Type: text/plain; name="pa_json_static.ml" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pa_json_static.ml" X-Attachment-Id: f_ezpyj182 KCoKICBDb252ZXJzaW9uIGJldHdlZW4gT0NhbWwgdHlwZXMgYW5kIEpTT04gdHlwZXMgYXMgcHJv dmlkZWQgYnkgdGhlIGpzb24td2hlZWwKICBsaWJyYXJ5LiAKICAKICBBdXRob3I6IE1hcnRpbiBK YW1ib24gPG1hcnRpbl9qYW1ib25AZW1haWx1c2VyLm5ldD4KCkNvcHlyaWdodCAoYykgMjAwNyBC dXJuaGFtIEluc3RpdHV0ZSBmb3IgTWVkaWNhbCBSZXNlYXJjaApBbGwgcmlnaHRzIHJlc2VydmVk LgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwphcmUgbWV0OgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhv ciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn JyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoqKQoKb3BlbiBDYW1scDQuUHJlQ2FzdApvcGVu IFByaW50ZgoKbGV0IGNoZWNrX3VuaXF1ZSBmIGwgPQogIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0 ZSA1MCBpbgogIExpc3QuaXRlcgogICAgKGZ1biB4IC0+IAogICAgICAgbGV0IChfbG9jLCBpZCkg PSBmIHggaW4KICAgICAgIGlmIEhhc2h0YmwubWVtIHRibCBpZCB0aGVuCgkgTG9jLnJhaXNlIF9s b2MKCSAgIChGYWlsdXJlICJ0aGlzIHRhZyBvciBsYWJlbCBpcyBub3QgdW5pcXVlIikKICAgICAg IGVsc2UgSGFzaHRibC5hZGQgdGJsIGlkICgpKQogICAgbAoKbGV0IHVub3B0IGRlZmF1bHQgPSBm dW5jdGlvbgogICAgTm9uZSAtPiBkZWZhdWx0CiAgfCBTb21lIHggLT4geAoKbGV0IHJlYyBvcHRt YXAgZiA9IGZ1bmN0aW9uCiAgICBbXSAtPiBbXQogIHwgaGQgOjogdGwgLT4KICAgICAgbWF0Y2gg ZiBoZCB3aXRoCgkgIE5vbmUgLT4gb3B0bWFwIGYgdGwKCXwgU29tZSB4IC0+IHggOjogb3B0bWFw IGYgdGwKICAgIAoKdHlwZSBmaWVsZCA9IHsgZmllbGRfY2FtbF9uYW1lIDogc3RyaW5nOwoJICAg ICAgIGZpZWxkX2pzb25fbmFtZSA6IHN0cmluZzsKCSAgICAgICBmaWVsZF90eXBlIDogdDsKCSAg ICAgICBmaWVsZF9jYW1sX2xvYyA6IExvYy50OwoJICAgICAgIGZpZWxkX2pzb25fbG9jIDogTG9j LnQ7CgkgICAgICAgb3B0aW9uYWwgOiBib29sOwoJICAgICAgIGRlZmF1bHQgOiBBc3QuZXhwciBv cHRpb247CgkgICAgICAgaXNfbXV0YWJsZSA6IGJvb2wgfQoKYW5kIGNvbnN0cnVjdG9yID0geyBj b25zX2NhbWxfbmFtZSA6IHN0cmluZzsKCQkgICAgY29uc19qc29uX25hbWUgOiBzdHJpbmc7CgkJ ICAgIGNvbnNfYXJncyA6IHQgbGlzdDsKCQkgICAgY29uc19jYW1sX2xvYyA6IExvYy50OwoJCSAg ICBjb25zX2pzb25fbG9jIDogTG9jLnQgfQoKYW5kIHR5cGVfZXhwciA9CiAgICBMaXN0IG9mIHQK ICB8IEFycmF5IG9mIHQKICB8IE9wdGlvbiBvZiB0CiAgfCBPYmplY3Qgb2YgZmllbGQgbGlzdAog IHwgUmVjb3JkIG9mIGZpZWxkIGxpc3QKICB8IEhhc2h0Ymwgb2YgdAogIHwgQXNzb2Mgb2YgdAog IHwgVHVwbGUgb2YgdCBsaXN0CiAgfCBWYXJpYW50IG9mIGNvbnN0cnVjdG9yIGxpc3QKICB8IFBv bHkgb2YgY29uc3RydWN0b3IgbGlzdAogIHwgTmFtZSBvZiBzdHJpbmcKICB8IFN0cmluZwogIHwg Qm9vbAogIHwgSW50CiAgfCBGbG9hdAogIHwgTnVtYmVyCiAgfCBSYXcKICB8IEN1c3RvbSBvZiBz dHJpbmcKCmFuZCB0ID0gTG9jLnQgKiB0eXBlX2V4cHIKCmFuZCB0eXBlX2RlZiA9IHsgZGVmIDog dDsKCQkgaXNfcHJlZGVmaW5lZCA6IGJvb2w7CgkJIGlzX3ByaXZhdGUgOiBib29sICgqIHVudXNl ZCBhdCB0aGUgbW9tZW50ICopIH0KCm1vZHVsZSBTdHJpbmdNYXAgPSBNYXAuTWFrZSAoU3RyaW5n KQoKbGV0IG1ha2VfdHlwZWRlZiBfbG9jIG5hbWVzIGwgPQogIGxldCByZWMgY29udmVydCAoX2xv YywgZGVmKSA9CiAgICBtYXRjaCBkZWYgd2l0aAoJTGlzdCB4IC0+IDw6Y3R5cDwgbGlzdCAkY29u dmVydCB4JCA+PgogICAgICB8IEFycmF5IHggLT4gPDpjdHlwPCBhcnJheSAkY29udmVydCB4JCA+ PgogICAgICB8IE9wdGlvbiB4IC0+IDw6Y3R5cDwgb3B0aW9uICRjb252ZXJ0IHgkID4+CiAgICAg IHwgT2JqZWN0IGwgLT4gCgkgIGxldCBtbCA9IExpc3QuZm9sZF9yaWdodCAoZnVuIHggYWNjIC0+ CiAgICAgICAgICAgIDw6Y3R5cDwgJGxpZDp4LmZpZWxkX2NhbWxfbmFtZSQgOiAkY29udmVydCB4 LmZpZWxkX3R5cGUkIDsgJGFjYyQgPj4pCiAgICAgICAgICAgIGwgPDpjdHlwPD4+IGluCgkgIDw6 Y3R5cDwgPCAkbWwkID4gPj4KICAgICAgfCBSZWNvcmQgciAtPiAKCSAgbGV0IGwgPSAKCSAgICBM aXN0LmZvbGRfcmlnaHQgYmVnaW4gZnVuIHggYWNjIC0+CiAgICAgICAgICAgICAgbGV0IF9sb2Mg PSB4LmZpZWxkX2NhbWxfbG9jIGluCiAgICAgICAgICAgICAgbGV0IHQgPSBjb252ZXJ0IHguZmll bGRfdHlwZSBpbgogICAgICAgICAgICAgIGxldCB0ID0gaWYgeC5pc19tdXRhYmxlIHRoZW4gPDpj dHlwPCBtdXRhYmxlICR0JCA+PiBlbHNlIHQgaW4KICAgICAgICAgICAgICA8OmN0eXA8ICRsaWQ6 eC5maWVsZF9jYW1sX25hbWUkIDogJHQkOyAkYWNjJCA+PgogICAgICAgICAgICBlbmQgciA8OmN0 eXA8Pj4gaW4KCSAgPDpjdHlwPCB7ICRsJCB9ID4+CiAgICAgIHwgSGFzaHRibCB4IC0+IDw6Y3R5 cDwgSGFzaHRibC50IHN0cmluZyAkY29udmVydCB4JCA+PgogICAgICB8IEFzc29jIHggLT4gPDpj dHlwPCBsaXN0IChzdHJpbmcgKiAkY29udmVydCB4JCkgPj4KICAgICAgfCBUdXBsZSBsIC0+IAoJ ICBsZXQgdGwgPSBMaXN0Lm1hcCBjb252ZXJ0IGwgaW4KCSAgPDpjdHlwPCAoICR0dXA6QXN0LnR5 U3RhX29mX2xpc3QgdGwkICkgPj4KICAgICAgfCBQb2x5IGwgLT4gCgkgIGxldCByZmwgPSAKCSAg ICBMaXN0LmZvbGRfcmlnaHQgKGZ1biBjIGFjYyAtPgoJCQlsZXQgbmFtZSA9IGMuY29uc19jYW1s X25hbWUgaW4KCQkJbWF0Y2ggYy5jb25zX2FyZ3Mgd2l0aAoJCQkgICAgW10gLT4gPDpjdHlwPCBg JG5hbWUkIHwgJGFjYyQgPj4KCQkJICB8IFt4XSAtPiA8OmN0eXA8IGAkbmFtZSQgb2YgJGNvbnZl cnQgeCQgfCAkYWNjJCA+PgoJCQkgIHwgXyAtPiBhc3NlcnQgZmFsc2UpCgkgICAgICBsIDw6Y3R5 cDw+PiBpbgoJICA8OmN0eXA8IFsgPSAkcmZsJCBdID4+CiAgICAgIHwgVmFyaWFudCB2IC0+IAoJ ICBsZXQgbCA9IAoJICAgIExpc3QuZm9sZF9yaWdodAoJICAgICAgKGZ1biB4IGFjYyAtPgoJCSBs ZXQgY2FsID0gTGlzdC5tYXAgY29udmVydCB4LmNvbnNfYXJncyBpbgogICAgICAgICAgICAgICAg IGxldCBfbG9jID0geC5jb25zX2NhbWxfbG9jIGluCgkJIDw6Y3R5cDwgJHVpZDp4LmNvbnNfY2Ft bF9uYW1lJCBvZiAkbGlzdDpjYWwkIHwgJGFjYyQgPj4pCgkgICAgICB2IDw6Y3R5cDw+PiBpbgoJ ICA8OmN0eXA8IFsgJGwkIF0gPj4KICAgICAgfCBOYW1lIHggLT4gCgkgIGlmIFN0cmluZ01hcC5t ZW0geCBuYW1lcyB0aGVuIDw6Y3R5cDwgJGxpZDp4JCA+PgoJICBlbHNlCgkgICAgTG9jLnJhaXNl IF9sb2MgCgkgICAgICAoRmFpbHVyZSAoInR5cGUgbmFtZSAiIF4geCBeIAoJCQkiIGlzIHVuZGVm aW5lZCBvciBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAndHlwZSAuLi4gYW5kIC4uLicgYmxvY2siKSkKICAgICAgfCBTdHJpbmcgLT4gPDpjdHlwPCBz dHJpbmcgPj4KICAgICAgfCBCb29sIC0+IDw6Y3R5cDwgYm9vbCA+PgogICAgICB8IEludCAtPiA8 OmN0eXA8IGludCA+PgogICAgICB8IEZsb2F0IC0+IDw6Y3R5cDwgZmxvYXQgPj4KICAgICAgfCBO dW1iZXIgLT4gPDpjdHlwPCBmbG9hdCA+PgogICAgICB8IFJhdyAtPiA8OmN0eXA8IEpzb25fdHlw ZS50ID4+CiAgICAgIHwgQ3VzdG9tIHMgLT4gPDpjdHlwPCAkdWlkOnMkIC4gdCA+PiBpbgoKICBs ZXQgdGRsID0gCiAgICBMaXN0LmZvbGRfcmlnaHQgYmVnaW4gZnVuICgoX2xvYywgbmFtZSksIHgp IGFjYyAtPgogICAgICBpZiB4LmlzX3ByZWRlZmluZWQgdGhlbiBhY2MKICAgICAgZWxzZQogICAg ICAgIGxldCBkY2wgPSBBc3QuVHlEY2wgKF9sb2MsIG5hbWUsIFtdLCBjb252ZXJ0IHguZGVmLCBb XSkgaW4KICAgICAgICA8OmN0eXA8ICRkY2wkIGFuZCAkYWNjJCA+PgogICAgZW5kIGwgPDpjdHlw PD4+IGluCiAgPDpzdHJfaXRlbTwgdHlwZSAkdGRsJCA+PgoKbGV0IG51bWJlcmVkX2xpc3QgbCA9 CiAgQXJyYXkudG9fbGlzdAogICAgKEFycmF5Lm1hcGkgCiAgICAgICAoZnVuIGkgeCAtPiAoeCwg IngiIF4gc3RyaW5nX29mX2ludCBpKSkKICAgICAgIChBcnJheS5vZl9saXN0IGwpKQoKbGV0IGV0 YV9leHBhbmQgPSBmdW5jdGlvbgogICAgPDpleHByPCBmdW4gWyAkXyQgXSA+PiBhcyBmIC0+IGYK ICB8IGUgLT4gbGV0IF9sb2MgPSBBc3QubG9jX29mX2V4cHIgZSBpbiA8OmV4cHI8IGZ1biB4IC0+ ICRlJCB4ID4+CgpsZXQgbWFrZV9vZmpzb24gX2xvYyBsID0KICBsZXQgYnJvd3NlIF9sb2MgZiA9 IDw6ZXhwcjwgSnNvbl90eXBlLkJyb3dzZS4kbGlkOmYkID4+IGluCgogIGxldCByZWMgY29udmVy dCAoX2xvYywgZGVmKSA9CiAgICBtYXRjaCBkZWYgd2l0aAoJTGlzdCB4IC0+IDw6ZXhwcjwgJGJy b3dzZSBfbG9jICJsaXN0IiQgJGNvbnZlcnQgeCQgPj4KICAgICAgfCBBcnJheSB4IC0+IAoJICA8 OmV4cHI8IGZ1biB4IC0+IAoJICAgIEFycmF5Lm9mX2xpc3QgKCgkYnJvd3NlIF9sb2MgImxpc3Qi JCAkY29udmVydCB4JCkgeCkgPj4KICAgICAgfCBPcHRpb24geCAtPiAKCSAgPDpleHByPCAkYnJv d3NlIF9sb2MgIm9wdGlvbmFsIiQgJGNvbnZlcnQgeCQgPj4KICAgICAgfCBPYmplY3QgbCAtPiBj b252ZXJ0X29iamVjdCBfbG9jIGwKICAgICAgfCBSZWNvcmQgciAtPiBjb252ZXJ0X3JlY29yZCBf bG9jIHIKICAgICAgfCBIYXNodGJsIHggLT4gCgkgIDw6ZXhwcjwgCgkgICAgIGZ1biB4IC0+IAoJ ICAgICAgIGxldCBsID0gJGJyb3dzZSBfbG9jICJvYmpla3QiJCB4IGluCgkgICAgICAgbGV0IHRi bCA9IEhhc2h0YmwuY3JlYXRlIChMaXN0Lmxlbmd0aCBsKSBpbgogICAgICAgICAgICAgICBkbyB7 IExpc3QuaXRlciAoZnVuIChzLCB4KSAtPiAKCQkJCSBIYXNodGJsLmFkZCB0YmwgcyAoJGNvbnZl cnQgeCQgeCkpIGw7CgkJICAgIHRibCB9ID4+CiAgICAgIHwgQXNzb2MgeCAtPiAKCSAgPDpleHBy PCBmdW4geCAtPgoJICAgICAgICAgICAgTGlzdC5tYXAgKGZ1biAoa2V5LCBkYXRhKSAtPiAoa2V5 LCAkY29udmVydCB4JCBkYXRhKSkKCSAgICAgICAgICAgICAgKCRicm93c2UgX2xvYyAib2JqZWt0 IiQgeCkgPj4KICAgICAgfCBUdXBsZSBsIC0+CgkgIGxldCBubCA9IG51bWJlcmVkX2xpc3QgbCBp bgoJICBsZXQgcGwgPSAKCSAgICBMaXN0LmZvbGRfcmlnaHQgCgkgICAgICAoZnVuICgoX2xvYywg XyksIG5hbWUpIHRsIC0+IDw6cGF0dDwgWyAkbGlkOm5hbWUkIDo6ICR0bCQgXSA+PikgCgkgICAg ICBubCA8OnBhdHQ8IFtdID4+IGluCgkgIGxldCBlbCA9IAoJICAgIExpc3QuZm9sZF9yaWdodCAo ZnVuICgoX2xvYywgXykgYXMgeCwgbmFtZSkgYWNjIC0+CgkJCTw6ZXhwcjwgJGNvbnZlcnQgeCQg JGxpZDpuYW1lJCwgJGFjYyQgPj4pCgkgICAgICBubCA8OmV4cHI8Pj4gaW4KCSAgPDpleHByPCBm dW4gWyBKc29uX3R5cGUuQXJyYXkgJHBsJCAtPiAoICR0dXA6ZWwkICkKCQkgICAgICB8IEpzb25f dHlwZS5BcnJheSBfIGFzIHggLT4KCQkJICBfX2pzb25fc3RhdGljX2Vycm9yIHgKCQkJICAgICJ3 cm9uZyBudW1iZXIgb2YgZWxlbWVudHMgaW4gSlNPTiBhcnJheSIKCQkgICAgICB8IHggLT4KCQkJ ICBfX2pzb25fc3RhdGljX2Vycm9yIHgKCQkJICAgICJub3QgYSBKU09OIGFycmF5IiBdID4+CiAg ICAgIHwgUG9seSBsIC0+CgkgIGNvbnZlcnRfdmFyaWFudHMgKGZ1biBfbG9jIG5hbWUgLT4gPDpl eHByPCBgICRuYW1lJCA+PikgX2xvYyBsCiAgICAgIHwgVmFyaWFudCBsIC0+CgkgIGNvbnZlcnRf dmFyaWFudHMgKGZ1biBfbG9jIG5hbWUgLT4gPDpleHByPCAkdWlkOm5hbWUkID4+KSBfbG9jIGwK ICAgICAgfCBOYW1lIHggLT4gPDpleHByPCAkbGlkOiB4IF4gIl9vZl9qc29uIiQgPj4KICAgICAg fCBTdHJpbmcgLT4gYnJvd3NlIF9sb2MgInN0cmluZyIKICAgICAgfCBCb29sIC0+IGJyb3dzZSBf bG9jICJib29sIgogICAgICB8IEludCAtPiBicm93c2UgX2xvYyAiaW50IgogICAgICB8IEZsb2F0 IC0+IGJyb3dzZSBfbG9jICJmbG9hdCIKICAgICAgfCBOdW1iZXIgLT4gYnJvd3NlIF9sb2MgIm51 bWJlciIKICAgICAgfCBSYXcgLT4gPDpleHByPCBmdW4geCAtPiB4ID4+CiAgICAgIHwgQ3VzdG9t IG1vZHVsIC0+IDw6ZXhwcjwgJHVpZDptb2R1bCQgLiBvZl9qc29uID4+CgogICBhbmQgY29udmVy dF9vYmplY3QgX2xvYyBsID0KICAgICBsZXQgcGVsID0gY29udmVydF9maWVsZF9saXN0IF9sb2Mg bCBpbgogICAgIGxldCBtZXRob2RzID0gCiAgICAgICBMaXN0LmZvbGRfcmlnaHQKCSAoZnVuIHgg YWNjIC0+CgkgICAgbGV0IG5hbWUgPSB4LmZpZWxkX2NhbWxfbmFtZSBpbgogICAgICAgICAgICA8 OmNsYXNzX3N0cl9pdGVtPCBtZXRob2QgJG5hbWUkID0gJGxpZDpuYW1lJCA7ICRhY2MkID4+KQoJ IGwgPDpjbGFzc19zdHJfaXRlbTw+PiBpbgogICAgIGV2YWxfd2l0aF90YmwgX2xvYyA8OmV4cHI8 IGxldCAkbGlzdDpwZWwkIGluIG9iamVjdCAkbWV0aG9kcyQgZW5kID4+CgogIGFuZCBjb252ZXJ0 X3JlY29yZCBfbG9jIHIgPQogICAgIGxldCBwZWwgPSBjb252ZXJ0X2ZpZWxkX2xpc3QgX2xvYyBy IGluCiAgICAgZXZhbF93aXRoX3RibCBfbG9jIDw6ZXhwcjwgeyAkbGlzdDpwZWwkIH0gPj4KCiAg YW5kIGNvbnZlcnRfZmllbGRfbGlzdCBfbG9jIGwgPQogICAgIExpc3QubWFwIAogICAgICAgKGZ1 biB7IGZpZWxkX2NhbWxfbmFtZSA9IG5hbWU7CgkgICAgICBmaWVsZF9qc29uX25hbWUgPSBqc29u X25hbWU7CgkgICAgICBmaWVsZF90eXBlID0geDsKCSAgICAgIG9wdGlvbmFsID0gb3B0aW9uYWw7 CgkgICAgICBkZWZhdWx0ID0gZGVmYXVsdCB9IC0+CgkgIGxldCBlMSA9IAoJICAgIGxldCBmID0g aWYgb3B0aW9uYWwgdGhlbiAiZmllbGR4IiBlbHNlICJmaWVsZCIgaW4KCSAgICA8OmV4cHI8IEpz b25fdHlwZS5Ccm93c2UuJGxpZDpmJCB0YmwgJHN0cjpqc29uX25hbWUkID4+IGluCgkgIGxldCBl MiA9CgkgICAgbWF0Y2ggZGVmYXVsdCB3aXRoCgkJU29tZSBlIC0+IAoJCSAgKDw6ZXhwcjwgCgkJ ICAgbWF0Y2ggJGUxJCB3aXRoIAoJCSAgICAgICBbIEpzb25fdHlwZS5OdWxsIC0+ICRlJAoJCSAg ICAgICB8IHggLT4gJGNvbnZlcnQgeCQgeCBdID4+KQoJICAgICAgfCBOb25lIC0+IDw6ZXhwcjwg JGNvbnZlcnQgeCQgJGUxJCA+PiBpbgoKCSAgPDpiaW5kaW5nPCAkbGlkOm5hbWUkID0gJGUyJCA+ PikKICAgICAgIGwKCiAgYW5kIGNvbnZlcnRfdmFyaWFudHMgbWFrZV9jb25zIF9sb2MgbCA9CiAg ICBsZXQgbDAsIGwxID0KICAgICAgTGlzdC5wYXJ0aXRpb24gKGZ1biB4IC0+IHguY29uc19hcmdz ID0gW10pIGwgaW4KICAgIGxldCBwd2VsMCA9CiAgICAgIExpc3QuZm9sZF9yaWdodAoJKGZ1biB7 IGNvbnNfY2FtbF9uYW1lID0gbmFtZTsKCSAgICAgICBjb25zX2pzb25fbmFtZSA9IGpzb25fbmFt ZSB9IGFjYyAtPgoJICAgPDptYXRjaF9jYXNlPCAkc3RyOmpzb25fbmFtZSQgLT4gJG1ha2VfY29u cyBfbG9jIG5hbWUkIHwgJGFjYyQgPj4pCglsMCA8Om1hdGNoX2Nhc2U8Pj4gaW4KICAgIGxldCBw d2VsMSA9CiAgICAgIExpc3QuZm9sZF9yaWdodAoJKGZ1biB7IGNvbnNfY2FtbF9uYW1lID0gbmFt ZTsKCSAgICAgICBjb25zX2pzb25fbmFtZSA9IGpzb25fbmFtZTsKCSAgICAgICBjb25zX2FyZ3Mg PSBhcmdzIH0gYWNjIC0+CgkgICBsZXQgYXJnbmFtZXMgPSBudW1iZXJlZF9saXN0IGFyZ3MgaW4K CSAgIGxldCBsaXN0X3BhdHQgPQoJICAgICBMaXN0LmZvbGRfcmlnaHQgCgkgICAgICAgKGZ1biAo XywgcykgbCAtPiAKCQkgIDw6cGF0dDwgWyAkbGlkOnMkIDo6ICRsJCBdID4+KQoJICAgICAgIGFy Z25hbWVzIDw6cGF0dDwgW10gPj4gaW4KCSAgIGxldCBlID0KCSAgICAgTGlzdC5mb2xkX2xlZnQK CSAgICAgICAoZnVuIGNvbnMgKGFyZywgcykgLT4gCgkJICA8OmV4cHI8ICRjb25zJCAoJGNvbnZl cnQgYXJnJCAkbGlkOnMkKSA+PikKCSAgICAgKG1ha2VfY29ucyBfbG9jIG5hbWUpIGFyZ25hbWVz IGluCgkgICA8Om1hdGNoX2Nhc2U8ICgkc3RyOmpzb25fbmFtZSQsICRsaXN0X3BhdHQkKSAtPiAk ZSQgfCAkYWNjJCA+PikKCWwxIDw6bWF0Y2hfY2FzZTw+PiBpbgogICAgbGV0IGRlZmF1bHRfY2Fz ZSA9CiAgICAgIDw6bWF0Y2hfY2FzZTwgXyAtPiBfX2pzb25fc3RhdGljX2Vycm9yIHgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFyaWFudCBuYW1lIG9yIFwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMiID4+CiAgICBpbgog ICAgCiAgICAoPDpleHByPCAKICAgICBmdW4KCSBbIEpzb25fdHlwZS5TdHJpbmcgcyBhcyB4IC0+ IAoJICAgICBtYXRjaCBzIHdpdGggWyAkcHdlbDAkIHwgJGRlZmF1bHRfY2FzZSQgXQoJICAgICAg IHwgSnNvbl90eXBlLkFycmF5IAoJCSAgIFsgSnNvbl90eXBlLlN0cmluZyBzIDo6IChbIF8gOjog XyBdIGFzIGFyZ3MpIF0gYXMgeCAtPiAKCQkgICBtYXRjaCAocywgYXJncykgd2l0aCBbICRwd2Vs MSQgfCAkZGVmYXVsdF9jYXNlJCBdCgkgICAgICAgfCB4IC0+IF9fanNvbl9zdGF0aWNfZXJyb3Ig eAoJCSAgICJub3QgYWJsZSB0byByZWFkIHRoaXMgYXMgXAogICAgICAgICAgICAgICAgICAgIGEg dmFyaWFudCIgXQogICAgID4+KQoKCiAgYW5kIGV2YWxfd2l0aF90YmwgX2xvYyBlID0KICAgICg8 OmV4cHI8IAogICAgIGZ1biB4IC0+CiAgICAgICBsZXQgdGJsID0gCgkgSnNvbl90eXBlLkJyb3dz ZS5tYWtlX3RhYmxlIChKc29uX3R5cGUuQnJvd3NlLm9iamVrdCB4KSBpbgogICAgICAgJGUkID4+ KQogIGluCgogIGxldCBlcnJvciA9CiAgICA8OnN0cl9pdGVtPCAKICAgIHZhbHVlIF9fanNvbl9z dGF0aWNfZXJyb3Igb2JqIG1zZyA9CiAgICAgIGxldCBtID0gNDAwIGluCiAgICAgIGxldCBzID0g SnNvbl9pby5zdHJpbmdfb2ZfanNvbiBvYmogaW4KICAgICAgbGV0IG9ial9zdHJpbmcgPQoJaWYg U3RyaW5nLmxlbmd0aCBzID4gbSB0aGVuIFN0cmluZy5zdWIgcyAwIChtIC0gNCkgXiAiIC4uLiIK CWVsc2UgcyBpbgogICAgICBKc29uX3R5cGUuanNvbl9lcnJvciAobXNnIF4gIjpcbiIgXiBvYmpf c3RyaW5nKSA+PiBpbgoKICBsZXQgZGVmcyA9IAogICAgTGlzdC5mb2xkX3JpZ2h0CiAgICAgIChm dW4gKChfbG9jLCBuYW1lKSwgeCkgYWNjIC0+IAoJICgqaWYgeC5pc19wcml2YXRlIHRoZW4gYWNj CgkgZWxzZSopCgkgICBsZXQgZm5hbWUgPSBuYW1lIF4gIl9vZl9qc29uIiBpbgogICAgICAgICAg IDw6YmluZGluZzwgKCAkbGlkOmZuYW1lJCA6IEpzb25fdHlwZS50IC0+ICRsaWQ6bmFtZSQgKSA9 IAogICAgICAgICAgICAgICAgICAgICAgJGV0YV9leHBhbmQgKGNvbnZlcnQgeC5kZWYpJCBhbmQg JGFjYyQgPj4pCiAgICAgIGwgPDpiaW5kaW5nPD4+CiAgaW4KICAgIDw6c3RyX2l0ZW08ICRlcnJv ciQ7IHZhbHVlIHJlYyAkZGVmcyQgPj4KCmxldCBtYWtlX3RvanNvbiBfbG9jIGwgPQogIGxldCBi dWlsZCBfbG9jIHMgPSA8OmV4cHI8IEpzb25fdHlwZS5CdWlsZC4gJGxpZDpzJCA+PiBpbgoKICBs ZXQgcmVjIGNvbnZlcnQgKF9sb2MsIGRlZikgPQogICAgbWF0Y2ggZGVmIHdpdGgKCUxpc3QgeCAt PiA8OmV4cHI8IEpzb25fdHlwZS5CdWlsZC5saXN0ICRjb252ZXJ0IHgkID4+CiAgICAgIHwgQXJy YXkgeCAtPiAKCSAgPDpleHByPCBmdW4geCAtPiAKICAgICAgICAgICAgICAgICAgICBKc29uX3R5 cGUuQnVpbGQubGlzdCAkY29udmVydCB4JCAoQXJyYXkudG9fbGlzdCB4KSA+PgogICAgICB8IE9w dGlvbiB4IC0+IDw6ZXhwcjwgSnNvbl90eXBlLkJ1aWxkLm9wdGlvbmFsICRjb252ZXJ0IHgkID4+ CiAgICAgIHwgT2JqZWN0IGwgLT4KCSAgY29udmVydF9maWVsZF9saXN0IChmdW4gbmFtZSAtPiA8 OmV4cHI8IHgjJGxpZDpuYW1lJCA+PikgCgkgICAgX2xvYyBsCiAgICAgIHwgUmVjb3JkIHIgLT4g CgkgIGNvbnZlcnRfZmllbGRfbGlzdCAoZnVuIG5hbWUgLT4gPDpleHByPCB4LiRsaWQ6bmFtZSQg Pj4pCgkgICAgX2xvYyByCiAgICAgIHwgSGFzaHRibCB4IC0+CgkgIDw6ZXhwcjwgZnVuIHRibCAt PiAKCSAgICBKc29uX3R5cGUuT2JqZWN0IAoJICAgICAgKEhhc2h0YmwuZm9sZCAoZnVuIGtleSBk YXRhIHRsIC0+IAoJCQkgICAgICAgWyAoa2V5LCAkY29udmVydCB4JCBkYXRhKSA6OiB0bCBdKQoJ CSB0YmwgW10pID4+CiAgICAgIHwgQXNzb2MgeCAtPgoJICA8OmV4cHI8IAoJICAgIGZ1biB4IC0+ CgkgICAgICBKc29uX3R5cGUuT2JqZWN0CgkgICAgICAgICgoTGlzdC5tYXAgKGZ1biAoa2V5LCBk YXRhKSAtPiAoa2V5LCAkY29udmVydCB4JCBkYXRhKSkpIHgpID4+CiAgICAgIHwgVHVwbGUgbCAt PgoJICBsZXQgbmwgPSBudW1iZXJlZF9saXN0IGwgaW4KCSAgbGV0IHBsID0gTGlzdC5mb2xkX3Jp Z2h0IAogICAgICAgICAgICAgICAgICAgIChmdW4gKF8sIG5hbWUpIGFjYyAtPiA8OnBhdHQ8ICRs aWQ6bmFtZSQsICRhY2MkID4+KQogICAgICAgICAgICAgICAgICAgIG5sIDw6cGF0dDw+PiBpbgoJ ICBsZXQgYSA9IExpc3QuZm9sZF9yaWdodCAKCQkgICAgKGZ1biAoeCwgbmFtZSkgdGwgLT4gCgkJ ICAgICAgIDw6ZXhwcjwgWyAkY29udmVydCB4JCAkbGlkOm5hbWUkIDo6ICR0bCQgXSA+PikKCQkg ICAgbmwgPDpleHByPCBbXSA+PiBpbgoJICA8OmV4cHI8IGZ1biBbICggJHR1cDpwbCQgKSAtPiBK c29uX3R5cGUuQXJyYXkgJGEkIF0gPj4KICAgICAgfCBQb2x5IGwgLT4gCgkgIGxldCBtYXRjaF9j YXNlcyA9CgkgICAgTGlzdC5tYXAKCSAgICAgIChmdW4geyBjb25zX2NhbWxfbmFtZSA9IG5hbWU7 CgkJICAgICBjb25zX2pzb25fbmFtZSA9IGpzb25fbmFtZTsKCQkgICAgIGNvbnNfYXJncyA9IGFy Z3MgfSAtPgoJCSBtYXRjaCBhcmdzIHdpdGgKCQkgICAgIFtdIC0+IAoJCSAgICAgICA8Om1hdGNo X2Nhc2U8IGAkbmFtZSQgLT4gSnNvbl90eXBlLlN0cmluZyAkc3RyOmpzb25fbmFtZSQgPj4KCQkg ICB8IFt4XSAtPgoJCSAgICAgICA8Om1hdGNoX2Nhc2U8IGAkbmFtZSQgYXJnIC0+CgkJCUpzb25f dHlwZS5BcnJheSAKCQkJICBbIEpzb25fdHlwZS5TdHJpbmcgJHN0cjpqc29uX25hbWUkOwoJCQkg ICAgJGNvbnZlcnQgeCQgYXJnIF0gPj4KCQkgICB8IF8gLT4gYXNzZXJ0IGZhbHNlKQoJICAgICAg bCBpbgoJICA8OmV4cHI8IGZ1biBbICRsaXN0Om1hdGNoX2Nhc2VzJCBdID4+CiAgICAgIHwgVmFy aWFudCB2IC0+IAoJICBsZXQgbWF0Y2hfY2FzZXMgPQoJICAgIExpc3QubWFwCgkgICAgICAoZnVu IHsgY29uc19jYW1sX25hbWUgPSBuYW1lOwoJCSAgICAgY29uc19qc29uX25hbWUgPSBqc29uX25h bWU7CgkJICAgICBjb25zX2FyZ3MgPSBhcmdzIH0gLT4KCQkgbWF0Y2ggYXJncyB3aXRoCgkJICAg ICBbXSAtPiAKCQkgICAgICAgPDptYXRjaF9jYXNlPCAkdWlkOm5hbWUkIC0+IEpzb25fdHlwZS5T dHJpbmcgJHN0cjpqc29uX25hbWUkID4+CgkJICAgfCBsIC0+CgkJICAgICAgIGxldCBhcmdzID0g bnVtYmVyZWRfbGlzdCBsIGluCgkJICAgICAgIGxldCBwID0KCQkJIExpc3QuZm9sZF9sZWZ0CgkJ CSAgIChmdW4gY29ucyAoXywgcykgLT4gPDpwYXR0PCAkY29ucyQgJGxpZDpzJCA+PikKCQkJICAg PDpwYXR0PCAkdWlkOm5hbWUkID4+IGFyZ3MgaW4KCQkgICAgICAgbGV0IGUgPQoJCQkgTGlzdC5m b2xkX3JpZ2h0CgkJCSAgIChmdW4gKHgsIHMpIGwgLT4gCgkJCSAgICAgIDw6ZXhwcjwgWyAkY29u dmVydCB4JCAkbGlkOnMkIDo6ICRsJCBdID4+KQoJCQkgICBhcmdzIDw6ZXhwcjwgW10gPj4gaW4K CQkgICAgICAgPDptYXRjaF9jYXNlPCAkcCQgLT4KCQkJSnNvbl90eXBlLkFycmF5IAoJCQkgIFsg SnNvbl90eXBlLlN0cmluZyAkc3RyOmpzb25fbmFtZSQgOjogJGUkIF0gPj4pCgkgICAgICB2IGlu CgkgIDw6ZXhwcjwgZnVuIFsgJGxpc3Q6bWF0Y2hfY2FzZXMkIF0gPj4KICAgICAgfCBOYW1lIHgg LT4gPDpleHByPCAkbGlkOiAianNvbl9vZl8iIF4geCQgPj4KICAgICAgfCBTdHJpbmcgLT4gYnVp bGQgX2xvYyAic3RyaW5nIgogICAgICB8IEJvb2wgLT4gYnVpbGQgX2xvYyAiYm9vbCIKICAgICAg fCBJbnQgLT4gYnVpbGQgX2xvYyAiaW50IgogICAgICB8IEZsb2F0IC0+IGJ1aWxkIF9sb2MgImZs b2F0IgogICAgICB8IE51bWJlciAtPiBidWlsZCBfbG9jICJmbG9hdCIKICAgICAgfCBSYXcgLT4g PDpleHByPCBmdW4geCAtPiB4ID4+CiAgICAgIHwgQ3VzdG9tIG1vZHVsIC0+IDw6ZXhwcjwgJHVp ZDptb2R1bCQgLiB0b19qc29uID4+CgogIGFuZCBjb252ZXJ0X2ZpZWxkX2xpc3QgYWNjZXNzIF9s b2MgbCA9CiAgICBsZXQgcGFpcnMgPSAKICAgICAgTGlzdC5mb2xkX3JpZ2h0CgkoZnVuIHsgZmll bGRfY2FtbF9uYW1lID0gbmFtZTsKCSAgICAgICBmaWVsZF9qc29uX25hbWUgPSBqc29uX25hbWU7 CgkgICAgICAgZmllbGRfdHlwZSA9IHggfSB0bCAtPgoJICAgPDpleHByPCBbICggJHN0cjpqc29u X25hbWUkLCAkY29udmVydCB4JCAkYWNjZXNzIG5hbWUkICkKCQkgICAgIDo6ICR0bCQgXSA+PikK CWwgPDpleHByPCBbXSA+PiBpbgogICAgPDpleHByPCBmdW4geCAtPiBKc29uX3R5cGUuT2JqZWN0 ICRwYWlycyQgPj4KICBpbgoKICBsZXQgZGVmcyA9IAogICAgTGlzdC5mb2xkX3JpZ2h0CiAgICAg IChmdW4gKChfbG9jLCBuYW1lKSwgeCkgYWNjIC0+IAoJIGxldCBmbmFtZSA9ICJqc29uX29mXyIg XiBuYW1lIGluCgkgPDpiaW5kaW5nPCAoICRsaWQ6Zm5hbWUkIDogJGxpZDpuYW1lJCAtPiBKc29u X3R5cGUudCApID0KCSAgICAgICAgICAgICRldGFfZXhwYW5kIChjb252ZXJ0IHguZGVmKSQgYW5k ICRhY2MkID4+KQogICAgICBsIDw6YmluZGluZzw+PiBpbgogIDw6c3RyX2l0ZW08IHZhbHVlIHJl YyAkZGVmcyQgPj4KCgpsZXQgZXhwYW5kX3R5cGVkZWZzIF9sb2MgbCA9CiAgY2hlY2tfdW5pcXVl IChmdW4gKG5hbWUsIF8pIC0+IG5hbWUpIGw7CiAgbGV0IG5hbWVzID0gCiAgICBMaXN0LmZvbGRf bGVmdCAKICAgICAgKGZ1biBtICgoKF9sb2MsIG5hbWUpLCBfKSBhcyBkYXRhKSAtPiBTdHJpbmdN YXAuYWRkIG5hbWUgZGF0YSBtKQogICAgICBTdHJpbmdNYXAuZW1wdHkgbCBpbgogIGxldCB0eXBl ZGVmID0gbWFrZV90eXBlZGVmIF9sb2MgbmFtZXMgbCBpbgogIGxldCBvZmpzb24gPSBtYWtlX29m anNvbiBfbG9jIGwgaW4KICBsZXQgdG9qc29uID0gbWFrZV90b2pzb24gX2xvYyBsIGluCiAgPDpz dHJfaXRlbTwgJHR5cGVkZWYkOyAkb2Zqc29uJDsgJHRvanNvbiQgPj4KCmxldCBvMmIgPSBmdW5j dGlvbiBOb25lIC0+IGZhbHNlIHwgXyAtPiB0cnVlCgpsZXQgaXNfcmVzZXJ2ZWQgPQogIGxldCBs ID0gWyAianNvbiI7ICJqc29uX3R5cGUiOwoJICAgICJzdHJpbmciOyAiYm9vbCI7ICJpbnQiOyAi ZmxvYXQiOyAKCSAgICAibnVtYmVyIjsgImFzc29jIiBdIGluCiAgbGV0IHRibCA9IEhhc2h0Ymwu Y3JlYXRlIDIwIGluCiAgTGlzdC5pdGVyIChmdW4gcyAtPiBIYXNodGJsLmFkZCB0YmwgcyAoKSkg bDsKICBIYXNodGJsLm1lbSB0YmwKCmxldCBsaXN0X29mX29wdCA9IGZ1bmN0aW9uIE5vbmUgLT4g W10gfCBTb21lIHggLT4gW3hdCmxldCBsaXN0X29mX29wdGxpc3QgPSBmdW5jdGlvbiBOb25lIC0+ IFtdIHwgU29tZSB4IC0+IHgKCmxldCBjaGVja19tZXRob2RzIGwgPQogIExpc3QuaXRlciAoZnVu IHggLT4KCSAgICAgICBpZiB4LmlzX211dGFibGUgdGhlbgoJCSBMb2MucmFpc2UgeC5maWVsZF9j YW1sX2xvYyAKCQkgICAoRmFpbHVyZSAib2JqZWN0IGZpZWxkcyBjYW5ub3QgYmUgbWFkZSBtdXRh YmxlIikpIGwKCmxldCBzdHJpbmdfYXNzb2MgX2xvYyA9IGZ1bmN0aW9uCiAgICAoX2xvYywgVHVw bGUgWyAoXywgU3RyaW5nKTsgKF8sIHgpIF0pIC0+IChfbG9jLCB4KQogIHwgKF8sIF8pIC0+IAog ICAgICBMb2MucmFpc2UgX2xvYwoJKEZhaWx1cmUgIm11c3QgYmUgb2YgdGhlIGZvcm0gKHN0cmlu ZyAqIC4uLikgYXNzb2MiKQoKb3BlbiBTeW50YXgKbGV0IGV2YWxfc3RyaW5nIHMgPSBDYW1scDQu U3RydWN0LlRva2VuLkV2YWwuc3RyaW5nIH5zdHJpY3Q6KCkgcwoKRVhURU5EIEdyYW0KICBHTE9C QUw6IHN0cl9pdGVtOwogIHN0cl9pdGVtOiBMRVZFTCAidG9wIiBbCiAgICBbICJ0eXBlIjsgTElE RU5UICJqc29uIjsgCiAgICAgIGwgPSBMSVNUMSB0eXBlX2JpbmRpbmcgU0VQICJhbmQiIC0+IGV4 cGFuZF90eXBlZGVmcyBfbG9jIGwgXQogIF07CgogIHR5cGVfYmluZGluZzogWwogICAgWyBuYW1l ID0gWyBzID0gTElERU5UIC0+IAoJCSBpZiBpc19yZXNlcnZlZCBzIHRoZW4KCQkgICBMb2MucmFp c2UgX2xvYyAKCQkgICAgIChGYWlsdXJlICgieW91IGNhbid0IHVzZSAnIiBeIHMgXiAiJyBhcyBh IHR5cGUgbmFtZSIpKQoJCSBlbHNlIChfbG9jLCBzKSBdOyAKICAgICAgIj0iOwogICAgICBwID0g T1BUIFsgTElERU5UICJwcmVkZWZpbmVkIiAoKiA7IAoJCXByaXYgPSBPUFQgInByaXZhdGUiKikg LT4gKCogcHJpdiA8PiBOb25lICopIGZhbHNlIF07CiAgICAgIHQgPSBbIHQgPSB0eXBlX2V4cHIg LT4gKHQgOiB0KQoJICB8IHIgPSByZWNvcmQgLT4gKF9sb2MsIFJlY29yZCByKQoJICB8IHYgPSB2 YXJpYW50cyAtPiAoX2xvYywgVmFyaWFudCB2KSBdIC0+CglsZXQgdHlwZV9kZWYgPQoJICBtYXRj aCBwIHdpdGgKCSAgICAgIE5vbmUgLT4geyBpc19wcmVkZWZpbmVkID0gZmFsc2U7CgkJCWlzX3By aXZhdGUgPSBmYWxzZTsKCQkJZGVmID0gdCB9CgkgICAgfCBTb21lIGlzX3ByaXZhdGUgLT4gCgkJ eyBpc19wcmVkZWZpbmVkID0gdHJ1ZTsKCQkgIGlzX3ByaXZhdGUgPSBpc19wcml2YXRlOwoJCSAg ZGVmID0gdCB9IGluCgkobmFtZSwgdHlwZV9kZWYpIF0KICBdOwoKICByZWNvcmQ6IFsKICAgIFsg InsiOyBsID0gbWV0aG9kczsgIn0iIC0+IGwgXQogIF07CgogIHZhcmlhbnRzOiBbCiAgICBbIGwg PSAKCUxJU1QxIFsgaWQgPSBbIGlkID0gVUlERU5UIC0+IChfbG9jLCBpZCkgXTsgCgkJbGFiZWwg PSBPUFQgWyBzID0gU1RSSU5HIC0+IAoJCQkJKF9sb2MsIGV2YWxfc3RyaW5nIHMpIF07CgkJdHlw ID0gT1BUIFsgIm9mIjsKCQkJICAgIHggPSBMSVNUMSB0eXBlX2V4cHIgTEVWRUwgInNpbXBsZSIg CgkJCQlTRVAgIioiIC0+IHggXSAtPiAKCQkgIGxldCBpZCcgPSB1bm9wdCBpZCBsYWJlbCBpbgoJ CSAgeyBjb25zX2NhbWxfbG9jID0gZnN0IGlkOwoJCSAgICBjb25zX2NhbWxfbmFtZSA9IHNuZCBp ZDsKCQkgICAgY29uc19qc29uX2xvYyA9IGZzdCBpZCc7CgkJICAgIGNvbnNfanNvbl9uYW1lID0g c25kIGlkJzsKCQkgICAgY29uc19hcmdzID0gbGlzdF9vZl9vcHRsaXN0IHR5cCB9IF0gCgkgIFNF UCAifCIgLT4gCgkgICAgY2hlY2tfdW5pcXVlIChmdW4geCAtPiAoeC5jb25zX2NhbWxfbG9jLCB4 LmNvbnNfY2FtbF9uYW1lKSkgbDsKICAgICAgICAgICAgY2hlY2tfdW5pcXVlIChmdW4geCAtPiAo eC5jb25zX2pzb25fbG9jLCB4LmNvbnNfanNvbl9uYW1lKSkgbDsKCSAgICBsIF0KICBdOwoKICB0 eXBlX2V4cHI6IFsKICAgICJ0b3AiIFsKICAgICAgeCA9IHR5cGVfZXhwcjsgIioiOyBsID0gTElT VDEgdHlwZV9leHByIExFVkVMICJzaW1wbGUiIFNFUCAiKiIgLT4KCShfbG9jLCBUdXBsZSAoeCA6 OiBsKSkgCiAgICBdCgkJCiAgfCAic2ltcGxlIiBbCiAgICAgIHggPSB0eXBlX2V4cHI7IExJREVO VCAibGlzdCIgLT4gKF9sb2MsIExpc3QgeCkKICAgIHwgeCA9IHR5cGVfZXhwcjsgTElERU5UICJh cnJheSIgLT4gKF9sb2MsIEFycmF5IHgpCiAgICB8IHggPSB0eXBlX2V4cHI7IExJREVOVCAib3B0 aW9uIiAtPiAoX2xvYywgT3B0aW9uIHgpCiAgICB8IHggPSB0eXBlX2V4cHI7IExJREVOVCAiYXNz b2MiIC0+IChfbG9jLCBBc3NvYyAoc3RyaW5nX2Fzc29jIF9sb2MgeCkpCiAgICB8ICI8IjsgbCA9 IG1ldGhvZHM7ICI+IiAtPiBjaGVja19tZXRob2RzIGw7IChfbG9jLCBPYmplY3QgbCkKICAgIHwg IlsiOyBsID0gcG9seW1vcnBoaWNfdmFyaWFudHM7ICJdIiAtPiAoX2xvYywgUG9seSBsKQogICAg fCAiKCI7IHggPSB0eXBlX2V4cHI7ICIpIiAtPiB4CiAgICB8ICIoIjsgTElERU5UICJzdHJpbmci OyAiLCI7IHggPSB0eXBlX2V4cHI7ICIpIjsgCiAgICAgIFVJREVOVCAiSGFzaHRibCI7ICIuIjsg TElERU5UICJ0IiAtPiAKCShfbG9jLCBIYXNodGJsIHgpCiAgICB8IExJREVOVCAic3RyaW5nIiAt PiAoX2xvYywgU3RyaW5nKQogICAgfCBMSURFTlQgImJvb2wiIC0+IChfbG9jLCBCb29sKQogICAg fCBMSURFTlQgImludCIgLT4gKF9sb2MsIEludCkKICAgIHwgTElERU5UICJmbG9hdCIgLT4gKF9s b2MsIEZsb2F0KQogICAgfCBMSURFTlQgIm51bWJlciIgLT4gKF9sb2MsIE51bWJlcikKICAgIHwg WyBVSURFTlQgIkpzb25fdHlwZSI7ICIuIjsgTElERU5UICJqc29uX3R5cGUiCiAgICAgIHwgTElE RU5UICJqc29uX3R5cGUiIF0gLT4gKF9sb2MsIFJhdykKICAgIHwgbmFtZSA9IExJREVOVCAtPiAo X2xvYywgTmFtZSBuYW1lKQogICAgfCBtb2R1bGVfbmFtZSA9IFVJREVOVDsgIi4iOyBMSURFTlQg InQiIC0+IAoJaWYgbW9kdWxlX25hbWUgPSAiSnNvbl90eXBlIiB0aGVuIChfbG9jLCBSYXcpCgll bHNlIChfbG9jLCBDdXN0b20gbW9kdWxlX25hbWUpIF0KICBdOwoKICBwb2x5bW9ycGhpY192YXJp YW50czogWwogICAgWyBsID0gCiAgICAgICAgTElTVDEgWyAiYCI7IGlkID0gWyBgKExJREVOVCBp ZCB8IFVJREVOVCBpZCkgLT4gKF9sb2MsIGlkKSBdOyAKCQlsYWJlbCA9IE9QVCBbIHMgPSBTVFJJ TkcgLT4gCgkJCQkoX2xvYywgZXZhbF9zdHJpbmcgcykgXTsKCQl0eXAgPSBPUFQgWyAib2YiOyB4 ID0gdHlwZV9leHByIC0+IHggXSAtPiAKCQkgIGxldCBpZCcgPSB1bm9wdCBpZCBsYWJlbCBpbgoJ CSAgeyBjb25zX2NhbWxfbG9jID0gZnN0IGlkOwoJCSAgICBjb25zX2NhbWxfbmFtZSA9IHNuZCBp ZDsKCQkgICAgY29uc19qc29uX2xvYyA9IGZzdCBpZCc7CgkJICAgIGNvbnNfanNvbl9uYW1lID0g c25kIGlkJzsKCQkgICAgY29uc19hcmdzID0gbGlzdF9vZl9vcHQgdHlwIH0gXSAKCSAgU0VQICJ8 IiAtPiAKCSAgICBjaGVja191bmlxdWUgKGZ1biB4IC0+ICh4LmNvbnNfY2FtbF9sb2MsIHguY29u c19jYW1sX25hbWUpKSBsOwogICAgICAgICAgICBjaGVja191bmlxdWUgKGZ1biB4IC0+ICh4LmNv bnNfanNvbl9sb2MsIHguY29uc19qc29uX25hbWUpKSBsOwoJICAgIGwgXQogIF07CgogIG1ldGhv ZHM6IFsKICAgIFsgbCA9IExJU1QwIAoJICAgIFsgbXV0ID0gT1BUICJtdXRhYmxlIjsKCSAgICAg IGxhYiA9IG1ldGhvZF9sYWJlbDsgeCA9IHR5cGVfZXhwcjsgCgkgICAgICBkZWZhdWx0ID0gT1BU IFsgIj0iOyBlID0gZXhwciBMRVZFTCAiYXBwbHkiIC0+IGUgXSAtPiAKCQlsZXQgKChpZCwgb3B0 aW9uYWwpLCBsYWJlbCkgPSBsYWIgaW4KCQlsZXQgaWQnID0gdW5vcHQgaWQgbGFiZWwgaW4KCQl7 IGZpZWxkX2NhbWxfbG9jID0gZnN0IGlkOwoJCSAgZmllbGRfY2FtbF9uYW1lID0gc25kIGlkOwoJ CSAgZmllbGRfanNvbl9sb2MgPSBmc3QgaWQnOwoJCSAgZmllbGRfanNvbl9uYW1lID0gc25kIGlk JzsKCQkgIGZpZWxkX3R5cGUgPSB4OwoJCSAgb3B0aW9uYWwgPSBvcHRpb25hbDsKCQkgIGRlZmF1 bHQgPSBkZWZhdWx0OwoJCSAgaXNfbXV0YWJsZSA9IChtdXQgPD4gTm9uZSkgfSBdCgkgICAgU0VQ ICI7IiAtPgoJY2hlY2tfdW5pcXVlIChmdW4geCAtPiAoeC5maWVsZF9jYW1sX2xvYywgeC5maWVs ZF9jYW1sX25hbWUpKSBsOwogICAgICAgIGNoZWNrX3VuaXF1ZSAoZnVuIHggLT4gKHguZmllbGRf anNvbl9sb2MsIHguZmllbGRfanNvbl9uYW1lKSkgbDsKCWwgXQogIF07CgogIG1ldGhvZF9sYWJl bDogWwogICAgWyBpZF9vcHQgPSBbIGlkID0gTElERU5UIC0+ICgoX2xvYywgaWQpLCBmYWxzZSkK ICAgICAgICAgICAgICAgfCAiPyI7IGlkID0gTElERU5UIC0+ICgoX2xvYywgaWQpLCB0cnVlKSBd OyAKICAgICAgbGFiZWwgPSBPUFQgWyBzID0gU1RSSU5HIC0+IAoJCSAgICAgIChfbG9jLCBldmFs X3N0cmluZyBzKSBdOwogICAgICAiOiIgLT4gKGlkX29wdCwgbGFiZWwpCiAgICB8IGlkID0gT1BU TEFCRUwgLT4gKCgoX2xvYywgaWQpLCB0cnVlKSwgTm9uZSkgXQogIF07CgpFTkQK ------=_Part_36253_17904398.1174855359817--