From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 129EEBB81 for ; Thu, 15 Dec 2005 11:35:12 +0100 (CET) Received: from gw-eur4.philips.com (gw-eur4.philips.com [161.85.125.10]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id jBFAZBGf009632 for ; Thu, 15 Dec 2005 11:35:11 +0100 Received: from smtpscan-eur4.philips.com (smtpscan-eur4.mail.philips.com [130.144.57.167]) by gw-eur4.philips.com (Postfix) with ESMTP id 28A744975B for ; Thu, 15 Dec 2005 10:35:10 +0000 (UTC) Received: from smtpscan-eur4.philips.com (localhost [127.0.0.1]) by localhost.philips.com (Postfix) with ESMTP id 3CAC4CBCB for ; Thu, 15 Dec 2005 10:35:08 +0000 (GMT) Received: from smtprelay-eur2.philips.com (smtprelay-eur2.philips.com [130.144.57.171]) by smtpscan-eur4.philips.com (Postfix) with ESMTP id 05396CC10 for ; Thu, 15 Dec 2005 10:35:07 +0000 (GMT) Received: from ehvrmh02.diamond.philips.com (ehvrmh02-srv.diamond.philips.com [130.139.27.125]) by smtprelay-eur2.philips.com (Postfix) with ESMTP id 9BF694C for ; Thu, 15 Dec 2005 10:35:06 +0000 (GMT) To: caml-list@yquem.inria.fr Subject: Comments welcomed to progr. style / speed of my first ocaml program "Error correcting LDPC decoder" MIME-Version: 1.0 X-Mailer: Lotus Notes Release 6.0.3 September 26, 2003 From: Andries Hekstra Message-ID: Date: Thu, 15 Dec 2005 11:33:27 +0100 X-MIMETrack: Serialize by Router on ehvrmh02/H/SERVER/PHILIPS(Release 6.5.3FP1HF291 | September 19, 2005) at 15/12/2005 11:33:30 Content-Type: multipart/mixed; boundary="=_mixed 003A2397C12570D8_=" X-Miltered: at concorde with ID 43A146DF.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; ocaml:01 ocaml:01 arrays:01 debugging:01 compiler:01 eindhoven:01 arrays:01 debugging:01 compiler:01 eindhoven:01 wrote:01 wrote:01 sans-serif:98 sans-serif:98 functions:01 X-Attachments: type="application/octet-stream" name="Main.ml" name="Main.ml" X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=HTML_20_30,HTML_MESSAGE autolearn=disabled version=3.0.3 --=_mixed 003A2397C12570D8_= Content-Type: multipart/alternative; boundary="=_alternative 003A2397C12570D8_=" --=_alternative 003A2397C12570D8_= Content-Type: text/plain; charset="US-ASCII" Dear All, I am an applied scientist in the areas of signal processing and error correction at Philips Research. Having done the programming work of my computer simulations in C/C++ for almost 10-15 years with increasingly mixed feelings about the languange, a friend pointed me to functional programming. This way I found ocaml and I must say I am very enthusiastic about it. The built-in arrays, the functions that are really meta functions and remove a lot of tedious programming and debugging. Also the combined availability of an interpreter and compiler is comforbable and not unlike matlab (which I hate). I am also intrigued by the promise of functional languages when multi-core computers will be the defacto standard. Attached please find the first program I wrote. It has about the same speed as its C++ counterpart (slightly faster). I welcome comments w.r.t. programming style, esp. when it affects the speed of the program. Regards, Andries Hekstra ------------------------------------------------------------------------ Dr. Ir. Andries P. Hekstra Philips Research High Tech Campus 37 5656 AG Eindhoven Tel./Fax/Secr. +31 40 27 42048/42566/44051 If you need anti-RSI break software : Look at http://www.workrave.org (good and for free) --=_alternative 003A2397C12570D8_= Content-Type: text/html; charset="US-ASCII"
Dear All,

I am an applied scientist in the areas of signal processing and error correction at Philips Research. Having done the programming work of my computer simulations in C/C++ for almost 10-15 years with increasingly mixed feelings about the languange, a friend pointed me to functional programming. This way I found ocaml and I must say I am very enthusiastic about it. The built-in arrays, the functions that are really meta functions and remove a lot of tedious programming and debugging. Also the combined availability of an interpreter and compiler is comforbable and not unlike matlab (which I hate).

I am also intrigued by the promise of functional languages when multi-core computers will be the defacto standard.

Attached please find the first program I wrote. It has about the same speed as its C++ counterpart (slightly faster). I welcome comments w.r.t. programming style, esp. when it affects the speed of the program.

Regards,

Andries Hekstra




------------------------------------------------------------------------
Dr. Ir. Andries P. Hekstra
Philips Research
High Tech Campus 37
5656 AG Eindhoven
Tel./Fax/Secr. +31 40 27 42048/42566/44051

If you need anti-RSI break software : Look at http://www.workrave.org (good and for free)
--=_alternative 003A2397C12570D8_=-- --=_mixed 003A2397C12570D8_= Content-Type: application/octet-stream; name="Main.ml" Content-Disposition: attachment; filename="Main.ml" Content-Transfer-Encoding: base64 KCogUGFyYW1ldGVycyBvZiB0aGUgTERQQyBjb2RlLCBsZWZ0IGFuZCByaWdodCBkZWdyZWUqKQ0K bGV0ICAgIGxkcGNfaiA9IDMNCmxldCAgICBsZHBjX2sgPSAzMA0KbGV0ICAgIGNvZGVSYXRlID0g MS4gLS4gZmxvYXRfb2ZfaW50IGxkcGNfaiAvLiBmbG9hdF9vZl9pbnQgbGRwY19rDQpsZXQgICAg dGFyZ2V0Q29kZXdvcmRMZW5ndGggPSAobGRwY19rICogMzAwKQ0KbGV0ICAgIGJsb2NrU2l6ZSA9 IHRhcmdldENvZGV3b3JkTGVuZ3RoIC8gbGRwY19rDQpsZXQgICAgY29kZXdvcmRMZW5ndGggPSBi bG9ja1NpemUgKiBsZHBjX2sNCmxldCAgICBudW1iZXJPZlBhcml0eUNoZWNrcyA9IGJsb2NrU2l6 ZSAqIGxkcGNfag0KbGV0ICAgIGZ1ZGdlRmFjdG9yID0gMC43NQ0KbGV0ICAgIG1heE51bWJlck9m SXRlcmF0aW9ucyA9IDMwDQo7Ow0KDQpwcmludF9zdHJpbmcgIkxEUEMgZGVjb2RlciBmb3IgcmF0 ZSAxIC0gIjsNCnByaW50X2ludCBsZHBjX2o7DQpwcmludF9zdHJpbmcgIi8iOw0KcHJpbnRfaW50 IGxkcGNfazsNCnByaW50X3N0cmluZyAiIEdhbGxhZ2VyIGNvZGUgd2l0aCBsZW5ndGggIjsNCnBy aW50X2ludCBjb2Rld29yZExlbmd0aDsNCmZsdXNoIHN0ZG91dA0KOzsNCg0KKCogQ29uc3RydWN0 aW9uIG9mIGEgc3BhcnNlIHBhcml0eSBjaGVjayBtYXRyaXgqKQ0KbGV0IGhlaWdodCBhID0gQXJy YXkubGVuZ3RoIGENCmxldCB3aWR0aCBhID0gQXJyYXkubGVuZ3RoIGEuKDApDQoNCmxldCBhcHBs eVRvTWF0cml4IGYgYSA9DQogICAgbGV0IHJlYyBhcHBseVRvTWF0cml4QXV4IGkgaiBmIGEgPSAN CiAgICAgICAgaWYgKGkgPj0gMCkgdGhlbiBiZWdpbiANCiAgICAgICAgICAgIGEuKGkpLihqKSA8 LSBmIGkgaiBhLihpKS4oaik7IA0KICAgICAgICAgICAgaWYgKGotMSA+PSAwKSANCiAgICAgICAg ICAgICAgICB0aGVuIGFwcGx5VG9NYXRyaXhBdXggaSAgICAgKGotMSkgICAgICAgICBmIGEgDQog ICAgICAgICAgICAgICAgZWxzZSBhcHBseVRvTWF0cml4QXV4IChpLTEpICh3aWR0aCBhIC0gMSkg ZiBhDQogICAgICAgIGVuZA0KICAgICAgICBpbiBhcHBseVRvTWF0cml4QXV4IChoZWlnaHQgYSAt IDEpICh3aWR0aCBhIC0gMSkgZiBhDQoNCmxldCBvcmRlciA9ICAgICAgIEFycmF5LmNyZWF0ZV9t YXRyaXggbGRwY19qIGNvZGV3b3JkTGVuZ3RoIDANCmxldCBwZXJtdXRhdGlvbiA9IEFycmF5LmNy ZWF0ZV9tYXRyaXggbGRwY19qIGNvZGV3b3JkTGVuZ3RoIDANCjs7DQoNCmFwcGx5VG9NYXRyaXgg KGZ1biBqIC0+IGZ1biBpIC0+IGZ1biB4IC0+IChSYW5kb20uaW50ICgxMDAgKiBjb2Rld29yZExl bmd0aCkpKSBvcmRlcjs7IA0KYXBwbHlUb01hdHJpeCAoZnVuIGogLT4gZnVuIGkgLT4gZnVuIHgg LT4gaSkgcGVybXV0YXRpb247Ow0KDQpsZXQgc3dhcEVsZW1lbnQgaSBqIGEgPSBsZXQgeCA9IGEu KGkpIGluIGEuKGkpIDwtIGEuKGopOyBhLihqKSA8LSB4DQoNCmxldCBxc29ydCBvcCBhID0gDQog ICAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpbiAgICAgDQogICAgbGV0IHJlYyBxc29ydEF1eCBp IGogb3AgYSA9DQogICAgICAgIGlmIChpIDwgaikgdGhlbiBiZWdpbiANCiAgICAgICAgICAgIGxl dCB4ID0gYS4oKGkgKyBqKSAvIDIpIGluDQogICAgICAgICAgICBsZXQgaTEgPSByZWYgaSBpbg0K ICAgICAgICAgICAgbGV0IGoxID0gcmVmIGogaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICB3aGlsZSAoIWkxIDw9ICFqMSkgZG8gDQog ICAgICAgICAgICAgICAgd2hpbGUgKG9wIGEuKCFpMSkgeCkgZG8gaW5jciBpMSBkb25lOw0KICAg ICAgICAgICAgICAgIHdoaWxlIChvcCB4IGEuKCFqMSkpIGRvIGRlY3IgajEgZG9uZTsNCiAgICAg ICAgICAgICAgICBpZiAoaTEgPD0gajEpIHRoZW4gYmVnaW4NCiAgICAgICAgICAgICAgICAgICAg c3dhcEVsZW1lbnQgIWkxICFqMSBhOyANCiAgICAgICAgICAgICAgICAgICAgaW5jciBpMTsNCiAg ICAgICAgICAgICAgICAgICAgZGVjciBqMQ0KICAgICAgICAgICAgICAgIGVuZA0KICAgICAgICAg ICAgZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAg ICAgICANCiAgICAgICAgICAgIHFzb3J0QXV4ICFpMSBqIG9wIGE7DQogICAgICAgICAgICBxc29y dEF1eCBpICFqMSBvcCBhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAg ICAgZW5kICAgICAgICAgICAgICAgIA0KICAgICAgICBpbiBxc29ydEF1eCAwIChsIC0gMSkgb3Ag YTs7DQoNCmxldCBxc29ydDIgb3AgYSBiID0gDQogICAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBp biAgICAgDQogICAgbGV0IHJlYyBxc29ydDJBdXggaSBqIG9wIGEgYiA9DQogICAgICAgIGlmIChp IDwgaikgdGhlbiBiZWdpbiANCiAgICAgICAgICAgIGxldCB4ID0gYS4oKGkgKyBqKSAvIDIpIGlu DQogICAgICAgICAgICBsZXQgaTEgPSByZWYgaSBpbg0KICAgICAgICAgICAgbGV0IGoxID0gcmVm IGogaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIHdoaWxlICgh aTEgPD0gIWoxKSBkbyANCiAgICAgICAgICAgICAgICB3aGlsZSAob3AgYS4oIWkxKSB4KSBkbyBp bmNyIGkxIGRvbmU7DQogICAgICAgICAgICAgICAgd2hpbGUgKG9wIHggYS4oIWoxKSkgZG8gZGVj ciBqMSBkb25lOw0KICAgICAgICAgICAgICAgIGlmIChpMSA8PSBqMSkgdGhlbiBiZWdpbg0KICAg ICAgICAgICAgICAgICAgICBzd2FwRWxlbWVudCAhaTEgIWoxIGE7IA0KICAgICAgICAgICAgICAg ICAgICBzd2FwRWxlbWVudCAhaTEgIWoxIGI7IA0KICAgICAgICAgICAgICAgICAgICBpbmNyIGkx Ow0KICAgICAgICAgICAgICAgICAgICBkZWNyIGoxDQogICAgICAgICAgICAgICAgIGVuZA0KICAg ICAgICAgICAgZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICBx c29ydDJBdXggIWkxIGogb3AgYSBiOw0KICAgICAgICAgICAgcXNvcnQyQXV4IGkgIWoxIG9wIGEg YjsgICAgICAgIA0KICAgICAgICBlbmQgICAgICAgICAgICAgICAgDQogICAgICAgIGluIHFzb3J0 MkF1eCAwIChsIC0gMSkgb3AgYSBiOzsNCg0KbGV0IHNvcnRSb3dzIGEgPSANCiAgICBsZXQgcmVj IHNvcnRSb3dzQXV4IGkgYSA9IGlmIChpID49IDApIHRoZW4gYmVnaW4gcXNvcnQgKDwpIGEuKGkp OyBzb3J0Um93c0F1eCAoaS0xKSBhIGVuZCAgDQogICAgICAgIGluIHNvcnRSb3dzQXV4IChBcnJh eS5sZW5ndGggYSAtIDEpIGENCg0KbGV0IHNvcnRSb3dzMiBhIGIgPSANCiAgICBsZXQgcmVjIHNv cnRSb3dzMkF1eCBpIGEgYiA9IGlmIChpID49IDApIHRoZW4gYmVnaW4gcXNvcnQyICg8KSBhLihp KSBiLihpKTsgc29ydFJvd3MyQXV4IChpLTEpIGEgYiBlbmQgIA0KICAgICAgICBpbiBzb3J0Um93 czJBdXggKEFycmF5Lmxlbmd0aCBhIC0gMSkgYSBiOzsNCg0Kc29ydFJvd3MyIG9yZGVyIHBlcm11 dGF0aW9uOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQpsZXQgaW52ZXJzZVBlcm11dGF0aW9u ID0gQXJyYXkuY3JlYXRlX21hdHJpeCBsZHBjX2ogY29kZXdvcmRMZW5ndGggMDs7DQoNCmZvciBq ID0gMCB0byBsZHBjX2ogLSAxIGRvDQogICAgZm9yIGkgPSAwIHRvIGNvZGV3b3JkTGVuZ3RoIC0g MSBkbyANCiAgICAgICAgaW52ZXJzZVBlcm11dGF0aW9uLihqKS4ocGVybXV0YXRpb24uKGopLihp KSkgPC0gaQ0KICAgIGRvbmUNCmRvbmU7OyAgICAgDQoNCmxldCBvbmVDb2x1bW5JblJvdyA9IEFy cmF5LmNyZWF0ZV9tYXRyaXggbnVtYmVyT2ZQYXJpdHlDaGVja3MgbGRwY19rIDA7Ow0KbGV0IGpP bmVDb2x1bW5JblJvdyA9IEFycmF5LmNyZWF0ZV9tYXRyaXggbnVtYmVyT2ZQYXJpdHlDaGVja3Mg bGRwY19rIDA7Ow0KDQogICAgKCogSGVyZSwgaSBpbmRleGVzIHBhcml0eSBjaGVja3MgKikNCmFw cGx5VG9NYXRyaXggKGZ1biBpIC0+IGZ1biBrIC0+IGZ1biB4IC0+IGludmVyc2VQZXJtdXRhdGlv bi4oaSAvIGJsb2NrU2l6ZSkuKGsgKyBsZHBjX2sgKiAoaSBtb2QgYmxvY2tTaXplKSkpIG9uZUNv bHVtbkluUm93OzsNCmFwcGx5VG9NYXRyaXggKGZ1biBpIC0+IGZ1biBrIC0+IGZ1biB4IC0+IGkg LyBibG9ja1NpemUpIGpPbmVDb2x1bW5JblJvdzs7DQoNCnNvcnRSb3dzMiBvbmVDb2x1bW5JblJv dyBqT25lQ29sdW1uSW5Sb3c7Ow0KDQpsZXQgb25lUm93SW5Db2x1bW4gPSBBcnJheS5jcmVhdGVf bWF0cml4IGNvZGV3b3JkTGVuZ3RoIGxkcGNfaiAwOzsNCmxldCBrT25lUm93SW5Db2x1bW4gPSBB cnJheS5jcmVhdGVfbWF0cml4IGNvZGV3b3JkTGVuZ3RoIGxkcGNfaiAwOzsNCg0KZm9yIGogPSAw IHRvIGxkcGNfai0xIGRvDQogICAgZm9yIHIgPSAwIHRvIGJsb2NrU2l6ZSAtMSBkbyANCiAgICAg ICAgbGV0IGkgPSByICsgaiAqIGJsb2NrU2l6ZSBpbiANCiAgICAgICAgZm9yIGsgPSAwIHRvIGxk cGNfay0xIGRvDQogICAgICAgICAgICBvbmVSb3dJbkNvbHVtbiAuKG9uZUNvbHVtbkluUm93Lihp KS4oaykpLihqKSA8LSBpOw0KICAgICAgICAgICAga09uZVJvd0luQ29sdW1uLihvbmVDb2x1bW5J blJvdy4oaSkuKGspKS4oaikgPC0gazsNCiAgICAgICAgZG9uZSAgICAgICAgICAgICAgICAgICAg ICAgIA0KICAgIGRvbmUNCmRvbmU7Ow0KDQpzb3J0Um93czIgb25lUm93SW5Db2x1bW4ga09uZVJv d0luQ29sdW1uOzsNCg0KbGV0IG51bWJlck9mQ29sdW1uUGFpcnNXaXRoT3ZlcmxhcCA9IHJlZiAw OzsgDQpmb3IgaTEgPSAwIHRvIGNvZGV3b3JkTGVuZ3RoIC0gMSBkbw0KICAgIGZvciBpMiA9IDAg dG8gaTEtMSBkbw0KICAgICAgICBsZXQgb3ZlcmxhcCA9IHJlZiAwIGluIGJlZ2luIA0KICAgICAg ICAgICAgZm9yIGoxID0gMCB0byBsZHBjX2otMSBkbw0KICAgICAgICAgICAgICAgIGZvciBqMiA9 IDAgdG8gbGRwY19qLTEgZG8NCiAgICAgICAgICAgICAgICAgICAgaWYgKG9uZVJvd0luQ29sdW1u LihpMSkuKGoxKSA9IG9uZVJvd0luQ29sdW1uLihpMikuKGoyKSkgdGhlbiBpbmNyIG92ZXJsYXA7 DQogICAgICAgICAgICAgICAgZG9uZQ0KICAgICAgICAgICAgZG9uZTsNCiAgICAgICAgICAgIGlm ICghb3ZlcmxhcCA+IDEpIHRoZW4gaW5jciBudW1iZXJPZkNvbHVtblBhaXJzV2l0aE92ZXJsYXA7 DQogICAgICAgIGVuZCAgICAgICAgDQogICAgZG9uZQ0KZG9uZTs7DQpwcmludF9zdHJpbmcgIlxu bnVtYmVyT2ZDb2x1bW5QYWlyc1dpdGhPdmVybGFwID0gIjs7DQpwcmludF9pbnQgIW51bWJlck9m Q29sdW1uUGFpcnNXaXRoT3ZlcmxhcDs7DQoNCigqIFJhbmRvbSBiaXQgdmVjdG9yICopDQpsZXQg Yml0QXJyYXlGcm9tSW50IG4gaWlpID0gDQogICAgbGV0IHJlYyBiaXRBcnJheUZyb21JbnRBdXgg aSBuIGlpaSA9IA0KICAgICAgICBpZiAoaSA8IG4pIHRoZW4gDQogICAgICAgICAgICBBcnJheS5h cHBlbmQgW3wgKGlpaSBtb2QgMikgfF0gIChiaXRBcnJheUZyb21JbnRBdXggKGkrMSkgbiAoaWlp IC8gMikpIA0KICAgICAgICBlbHNlIFt8fF0NCiAgICAgICAgaW4gYml0QXJyYXlGcm9tSW50QXV4 IDAgbiBpaWkgDQoNCmxldCBtYWtlUmFuZG9tQml0IGEgPSANCiAgICBsZXQgcmVjIG1ha2VSYW5k b21CaXRBdXggaSBhID0gDQogICAgICAgIGlmIChpID4gMCkgdGhlbiBiZWdpbg0KICAgICAgICAg ICAgbGV0IGIgPSBiaXRBcnJheUZyb21JbnQgOCAoUmFuZG9tLmludCAyNTYpIGluDQogICAgICAg ICAgICBsZXQgaTEgPSByZWYgaSBpbiANCiAgICAgICAgICAgIGxldCBjb3VudCA9IHJlZiAwIGlu IGJlZ2luICAgICAgIA0KICAgICAgICAgICAgICAgIHdoaWxlICghaTEgPj0gMCkgJiAoIWNvdW50 IDwgOCkgZG8NCiAgICAgICAgICAgICAgICAgICAgYS4oIWkxKSA8LSBiLighY291bnQpOw0KICAg ICAgICAgICAgICAgICAgICBkZWNyIGkxOw0KICAgICAgICAgICAgICAgICAgICBpbmNyIGNvdW50 Ow0KICAgICAgICAgICAgICAgIGRvbmU7DQogICAgICAgICAgICAgICAgbWFrZVJhbmRvbUJpdEF1 eCAhaTEgYQ0KICAgICAgICAgICAgZW5kICAgIA0KICAgICAgICBlbmQgICAgICAgICANCiAgICBp biBtYWtlUmFuZG9tQml0QXV4IChBcnJheS5sZW5ndGggYSAtIDEpIGENCg0KKCogTm9ybWFsIGRp c3RyaWJ1dGlvbiAqKSAgICANCmxldCByYW5kb21HYXVzc2lhbiBzaWdtYSA9DQogICAgbGV0IHUx ID0gUmFuZG9tLmZsb2F0IDEuIGluDQogICAgbGV0IHUyID0gUmFuZG9tLmZsb2F0IDEuIGluICAg ICAgICANCiAgICBsZXQgciA9IHNxcnQgKC0yLiAqLiBsb2cgKHUxKSkgaW4NCiAgICBsZXQgcGkg PSAyLiAqLiBhc2luIDEuIGluDQogICAgbGV0IHBoaSA9IDIuICouIHBpICouIHUyIA0KICAgICAg ICBpbiBzaWdtYSAqLiByICouIGNvcyAocGhpKSAgICAgICAgDQogICAgICAgICANCigqIE1lc3Nh Z2UgcGFzc2luZyBmdW5jdGlvbnMgKikNCmxldCBzdW0gYSA9IGxldCByZWMgc3VtIGkgYSA9IGlm IChpID4gMCkgdGhlbiBhLihpKSArLiBzdW0gKGktMSkgYSBlbHNlIGlmIChpID0gMCkgdGhlbiBh LihpKSBlbHNlIDAuDQogICAgaW4gc3VtICgoQXJyYXkubGVuZ3RoIGEpIC0gMSkgYQ0KbGV0IGhh cmRCaXQgc29mdEJpdCA9IGlmIChzb2Z0Qml0ID49IDAuKSB0aGVuIDAgZWxzZSAxDQpsZXQgcmVs aWFiaWxpdHkgc29mdEJpdCA9IGlmIChzb2Z0Qml0ID49IDAuKSB0aGVuIHNvZnRCaXQgZWxzZSAo LS4gc29mdEJpdCkNCg0KKCogTERQQyBkZWNvZGUgKikNCmxldCBzb2Z0Qml0T3V0IGNoYW5uZWxM TFIxIG1lc3NhZ2VTeW1ib2xOb2RlSW4xID0gY2hhbm5lbExMUjEgKy4gc3VtIG1lc3NhZ2VTeW1i b2xOb2RlSW4xIA0KbGV0IGhhcmRCaXRPdXQgY2hhbm5lbExMUjEgbWVzc2FnZVN5bWJvbE5vZGVJ bjEgPSBoYXJkQml0IChzb2Z0Qml0T3V0IGNoYW5uZWxMTFIxIG1lc3NhZ2VTeW1ib2xOb2RlSW4x KSAgICAgICAgIA0KDQpsZXQgcHJvY2Vzc0NoZWNrTm9kZSBjaGFubmVsTExSIA0KICAgICAgICAg ICAgICAgICAgICAgb25lQ29sdW1uSW5Sb3cgDQogICAgICAgICAgICAgICAgICAgICBqT25lQ29s dW1uSW5Sb3cNCiAgICAgICAgICAgICAgICAgICAgIHN5bmRyb21lICANCiAgICAgICAgICAgICAg ICAgICAgIG1lc3NhZ2VzU3ltYm9sTm9kZUluIA0KICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn ZUNoZWNrTm9kZUluIA0KICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUNoZWNrTm9kZU91dCA9 IA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgbGV0IG1lc3NhZ2VTeW1ib2xOb2RlT3V0IGNo YW5uZWxMTFIxIG1lc3NhZ2VTeW1ib2xOb2RlSW4xIGogPSANCiAgICAgICAgICAgIChzb2Z0Qml0 T3V0IGNoYW5uZWxMTFIxIG1lc3NhZ2VTeW1ib2xOb2RlSW4xKSAtLiBtZXNzYWdlU3ltYm9sTm9k ZUluMS4oaikgaW4gYmVnaW4NCiAgICAgICAgICAgIA0KICAgICAgICAoKiBHZXQgdGhlIGlucHV0 IG1lc3NhZ2VzIHRvIHRoZSBjdXJyZW50IGNoZWNrIG5vZGUgKikNCiAgICAgICAgZm9yIGsgPSAw IHRvIGxkcGNfay0xIGRvIA0KICAgICAgICAgICAgbWVzc2FnZUNoZWNrTm9kZUluLihrKSA8LSBm dWRnZUZhY3RvciAqLiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChtZXNzYWdlU3ltYm9sTm9kZU91dCBjaGFubmVsTExSLihvbmVDb2x1bW5JblJvdy4oaykpIA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1lc3NhZ2VzU3ltYm9sTm9kZUluLihvbmVDb2x1bW5JblJvdy4oaykpIA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGpPbmVDb2x1bW5JblJvdy4oaykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg DQogICAgICAgIGRvbmU7IA0KDQogICAgICAgICgqIENvbXB1dGUgdGhlIHRvdGFsIEVYT1IsIHRo ZSBtaW4uIGFuZCBzZWNvbmQgbWluLiByZWxpYWJpbGl0eSBhbmQgdGhlIGluZGV4ICopDQogICAg ICAgIGxldCBrMSA9IHJlZiAwIGluICANCiAgICAgICAgbGV0IG1pblJlbGlhYmlsaXR5MSA9IHJl ZiAxZTEwIGluIA0KICAgICAgICBsZXQgbWluUmVsaWFiaWxpdHkyID0gcmVmIDFlMTAgaW4NCiAg ICAgICAgbGV0IHRvdGFsRXhvciA9IHJlZiBzeW5kcm9tZSBpbiBiZWdpbiAgICAgICAgICAgICAg ICANCiAgICAgICAgICAgDQogICAgICAgICAgICBmb3IgayA9IDAgdG8gbGRwY19rLTEgZG8gDQog ICAgICAgICAgICAgICAgdG90YWxFeG9yIDo9ICF0b3RhbEV4b3IgKyBoYXJkQml0IG1lc3NhZ2VD aGVja05vZGVJbi4oayk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgbGV0IGgg PSByZWxpYWJpbGl0eSBtZXNzYWdlQ2hlY2tOb2RlSW4uKGspIGluICANCiAgICAgICAgICAgICAg ICAgICAgaWYgIW1pblJlbGlhYmlsaXR5MSA+PSBoIHRoZW4gYmVnaW4NCiAgICAgICAgICAgICAg ICAgICAgICAgIG1pblJlbGlhYmlsaXR5MiA6PSAhbWluUmVsaWFiaWxpdHkxOw0KICAgICAgICAg ICAgICAgICAgICAgICAgbWluUmVsaWFiaWxpdHkxIDo9IGg7DQogICAgICAgICAgICAgICAgICAg ICAgICBrMSA6PSBrOw0KICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbg0KICAgICAg ICAgICAgICAgICAgICAgICAgaWYgIW1pblJlbGlhYmlsaXR5MiA+PSBoIHRoZW4gbWluUmVsaWFi aWxpdHkyIDo9IGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAg ICAgICAgICBlbmQNCiAgICAgICAgICAgIGRvbmU7IA0KICAgICAgICANCiAgICAgICAgICAgIHRv dGFsRXhvciA6PSAhdG90YWxFeG9yIG1vZCAyOyAgICAgICAgICANCiAgICAgICAgICAgIA0KICAg ICAgICAgICAgKCogQ29tcHV0ZSB0aGUgb3V0cHV0IG1lc3NhZ2VzICopDQogICAgICAgICAgICBm b3IgayA9IDAgdG8gbGRwY19rLTEgZG8gDQogICAgICAgICAgICAgICAgbGV0IGggPSBpZiBrID0g IWsxIHRoZW4gIW1pblJlbGlhYmlsaXR5MiBlbHNlICFtaW5SZWxpYWJpbGl0eTEgaW4NCiAgICAg ICAgICAgICAgICAgICAgaWYgKCghdG90YWxFeG9yICsgKGhhcmRCaXQgbWVzc2FnZUNoZWNrTm9k ZUluLihrKSkpIG1vZCAyKSA9IDAgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn ZUNoZWNrTm9kZU91dC4oaykgPC0gaA0KICAgICAgICAgICAgICAgICAgICBlbHNlIA0KICAgICAg ICAgICAgICAgICAgICAgICAgbWVzc2FnZUNoZWNrTm9kZU91dC4oaykgPC0gKC0uIGgpDQogICAg ICAgICAgICBkb25lOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAoKiBBc3NpZ24gdGhlIG91 dHB1dCBtZXNzYWdlcyAqKQ0KICAgICAgICAgICAgZm9yIGsgPSAwIHRvIGxkcGNfay0xIGRvIA0K ICAgICAgICAgICAgICAgIG1lc3NhZ2VzU3ltYm9sTm9kZUluLihvbmVDb2x1bW5JblJvdy4oaykp LihqT25lQ29sdW1uSW5Sb3cuKGspKSA8LSBtZXNzYWdlQ2hlY2tOb2RlT3V0LihrKTsgDQogICAg ICAgICAgICBkb25lOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAoIXRvdGFsRXhvciA9IDAp ICAgIA0KICAgICAgICBlbmQNCiAgICBlbmQgDQogICAgICAgICAgDQpsZXQgbGRwY0RlY29kZSB0 cmFuc21pdHRlZENvZGV3b3JkIA0KICAgICAgICAgICAgICAgc3luZHJvbWUNCiAgICAgICAgICAg ICAgIGNoYW5uZWxMTFIgDQogICAgICAgICAgICAgICBkZWNvZGVkQ29kZXdvcmQgDQogICAgICAg ICAgICAgICBvbmVDb2x1bW5JblJvdyANCiAgICAgICAgICAgICAgIGpPbmVDb2x1bW5JblJvdyAN CiAgICAgICAgICAgICAgIG1lc3NhZ2VzU3ltYm9sTm9kZUluIA0KICAgICAgICAgICAgICAgbnVt YmVyT2ZJdGVyYXRpb25zID0NCiAgICANCiAgICBsZXQgbWVzc2FnZUNoZWNrTm9kZUluID0gQXJy YXkuY3JlYXRlIGxkcGNfayAwLiBpbg0KICAgIGxldCBtZXNzYWdlQ2hlY2tOb2RlT3V0ID0gQXJy YXkuY3JlYXRlIGxkcGNfayAwLiBpbg0KICAgIGxldCBhbGxaZXJvZXNTeW5kcm9tZSA9IHJlZiBm YWxzZSBpbiBiZWdpbg0KICAgICAgICBudW1iZXJPZkl0ZXJhdGlvbnMgOj0gMDsNCiAgICANCiAg ICAgICAgd2hpbGUgKCFudW1iZXJPZkl0ZXJhdGlvbnMgPCBtYXhOdW1iZXJPZkl0ZXJhdGlvbnMp ICYgbm90ICFhbGxaZXJvZXNTeW5kcm9tZSBkbyANCiAgICAgICAgICAgIGFsbFplcm9lc1N5bmRy b21lIDo9IHRydWU7DQogICAgICAgICAgICBmb3Igcm93ID0gMCB0byBudW1iZXJPZlBhcml0eUNo ZWNrcyAtIDEgZG8gDQogICAgICAgICAgICAgICAgaWYgbm90IChwcm9jZXNzQ2hlY2tOb2RlIGNo YW5uZWxMTFIgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZUNv bHVtbkluUm93Lihyb3cpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqT25lQ29sdW1uSW5Sb3cuKHJvdykgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN5bmRyb21lLihyb3cpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1lc3NhZ2VzU3ltYm9sTm9kZUluDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1lc3NhZ2VDaGVja05vZGVJbg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQ2hlY2tOb2RlT3V0KSB0aGVuDQogICAgICAgICAg ICAgICAgICAgIGFsbFplcm9lc1N5bmRyb21lIDo9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAg DQogICAgICAgICAgICBkb25lOyAgICANCiAgICAgICAgICAgIGluY3IgbnVtYmVyT2ZJdGVyYXRp b25zOw0KICAgICAgICBkb25lOyAgDQogICAgICAgIA0KICAgICAgICBsZXQgbnVtYmVyT2ZCaXRF cnJvcnMgPSByZWYgMCBpbiBiZWdpbg0KICAgICAgICAgICAgZm9yIGNvbHVtbiA9IDAgdG8gY29k ZXdvcmRMZW5ndGggLSAxIGRvDQogICAgICAgICAgICAgICAgZGVjb2RlZENvZGV3b3JkLihjb2x1 bW4pIDwtIGhhcmRCaXRPdXQgY2hhbm5lbExMUi4oY29sdW1uKSBtZXNzYWdlc1N5bWJvbE5vZGVJ bi4oY29sdW1uKTsNCiAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZENvZGV3b3JkLihjb2x1bW4p IDw+IHRyYW5zbWl0dGVkQ29kZXdvcmQuKGNvbHVtbikpIHRoZW4NCiAgICAgICAgICAgICAgICAg ICAgaW5jciBudW1iZXJPZkJpdEVycm9yczsgICAgDQogICAgICAgICAgICBkb25lOw0KICAgIA0K ICAgICAgICAgICAgIW51bWJlck9mQml0RXJyb3JzOyAgIA0KICAgICAgICBlbmQNCiAgICBlbmQN CiAgICAgICAgDQooKiBTaW11bGF0aW9uIHBhcmFtZXRlcnMgKikNCmxldCBlYk92ZXJOb0RiTG93 ID0gMy40DQpsZXQgZWJPdmVyTm9EYkhpZ2ggPSA0Lg0KKCpsZXQgZWJPdmVyTm9EYkxvdyA9IDEw LjANCmxldCBlYk92ZXJOb0RiSGlnaCA9IDEwLjAqKQ0KbGV0IGViT3Zlck5vRGJTdGVwID0gMC4x DQpsZXQgbnVtYmVyT2ZDb2Rld29yZHNUb1NpbXVsYXRlID0gMzAwMDANCg0KbGV0IGViT3Zlck5v RGIgPSByZWYgZWJPdmVyTm9EYkxvdw0KbGV0IHRvdGFsTnVtYmVyT2ZGcmFtZUVycm9ycyA9IHJl ZiAxICANCjs7DQoNCndoaWxlICghZWJPdmVyTm9EYiA8PSBlYk92ZXJOb0RiSGlnaCkgJiAoIXRv dGFsTnVtYmVyT2ZGcmFtZUVycm9ycyA+IDApIGRvDQoNCiAgICBwcmludF9zdHJpbmcgIlxuXG5F Yk92ZXJOb0RiID0gIjsNCiAgICBwcmludF9mbG9hdCAgIWViT3Zlck5vRGI7ICAgIA0KICAgIHBy aW50X3N0cmluZyAiLCB0aW1lID0gIjsNCiAgICBwcmludF9mbG9hdCAoU3lzLnRpbWUoKSk7DQog ICAgcHJpbnRfc3RyaW5nICIgc2Vjb25kcyFcbiI7DQogICAgZmx1c2ggc3Rkb3V0Ow0KDQogICAg bGV0IGViT3Zlck5vID0gMTAuICoqICghZWJPdmVyTm9EYiAvLiAxMC4pIGluIA0KICAgIGxldCBs YyA9IDQuICouIGViT3Zlck5vICouIGNvZGVSYXRlIGluIA0KICAgIGxldCBzaWdtYU5vaXNlID0g MS4gLy4gc3FydCAoMi4gKi4gZWJPdmVyTm8gKi4gY29kZVJhdGUpIGluIA0KICAgIA0KICAgIGxl dCB0b3RhbE51bWJlck9mQ2hhbm5lbEJpdEVycm9ycyA9IHJlZiAwLiBpbg0KICAgIGxldCB0b3Rh bE51bWJlck9mQml0cyA9IHJlZiAwLiBpbg0KICAgIGxldCB0b3RhbE51bWJlck9mRGVjb2RlZEJp dEVycm9ycyA9IHJlZiAwLiBpbiANCiAgICBsZXQgdG90YWxOdW1iZXJPZkZyYW1lcyA9IHJlZiAw IGluIA0KICAgIGxldCB0b3RhbE51bWJlck9mSXRlcmF0aW9ucyA9IHJlZiAwLiBpbiANCiAgICAg ICAgDQogICAgbGV0IHRyYW5zbWl0dGVkQ29kZXdvcmQgPSBBcnJheS5jcmVhdGUgY29kZXdvcmRM ZW5ndGggMCBpbiANCiAgICBsZXQgZGVjb2RlZENvZGV3b3JkID0gQXJyYXkuY3JlYXRlIGNvZGV3 b3JkTGVuZ3RoIDAgaW4gDQogICAgbGV0IHN5bmRyb21lID0gQXJyYXkuY3JlYXRlIG51bWJlck9m UGFyaXR5Q2hlY2tzIDAgaW4gDQogICAgbGV0IGNoYW5uZWxMTFIgPSBBcnJheS5jcmVhdGUgY29k ZXdvcmRMZW5ndGggMC4gaW4gDQogICAgDQogICAgbGV0IG1lc3NhZ2VzU3ltYm9sTm9kZUluID0g QXJyYXkuY3JlYXRlX21hdHJpeCBjb2Rld29yZExlbmd0aCBsZHBjX2ogMC4gaW4gYmVnaW4NCiAg ICANCiAgICAgICAgdG90YWxOdW1iZXJPZkZyYW1lRXJyb3JzIDo9IDA7IA0KICAgIA0KICAgICAg ICB3aGlsZSAoIXRvdGFsTnVtYmVyT2ZGcmFtZXMgPCBudW1iZXJPZkNvZGV3b3Jkc1RvU2ltdWxh dGUpIA0KICAgICAgICAgICAgICAgICYgKCghdG90YWxOdW1iZXJPZkRlY29kZWRCaXRFcnJvcnMg PCA1MDAuKSBvciAoIXRvdGFsTnVtYmVyT2ZGcmFtZUVycm9ycyA8IDIwMCkpIGRvICAgIA0KICAg ICAgICANCiAgICAgICAgICAgIG1ha2VSYW5kb21CaXQgdHJhbnNtaXR0ZWRDb2Rld29yZDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICBmb3IgciA9IDAgdG8g bnVtYmVyT2ZQYXJpdHlDaGVja3MtMSBkbw0KICAgICAgICAgICAgICAgIHN5bmRyb21lLihyKSA8 LSAwOw0KICAgICAgICAgICAgICAgIGZvciBrID0gMCB0byBsZHBjX2stMSBkbw0KICAgICAgICAg ICAgICAgICAgICBzeW5kcm9tZS4ocikgPC0gKChzeW5kcm9tZS4ocikgKyB0cmFuc21pdHRlZENv ZGV3b3JkLihvbmVDb2x1bW5JblJvdy4ocikuKGspKSkgbW9kIDIpDQogICAgICAgICAgICAgICAg ZG9uZQ0KICAgICAgICAgICAgZG9uZTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yIGkg PSAwIHRvIGNvZGV3b3JkTGVuZ3RoIC0gMSBkbw0KICAgICAgICAgICAgICAgIGNoYW5uZWxMTFIu KGkpIDwtIGZsb2F0X29mX2ludCAoMSAtIDIqdHJhbnNtaXR0ZWRDb2Rld29yZC4oaSkpICsuIHJh bmRvbUdhdXNzaWFuIHNpZ21hTm9pc2UNCiAgICAgICAgICAgIGRvbmU7DQogICAgICAgICAgICAN CiAgICAgICAgICAgIGxldCBudW1iZXJPZkNoYW5uZWxCaXRFcnJvcnMgPSByZWYgMCBpbiBiZWdp bg0KICAgICAgICAgICAgICAgIGZvciBpID0gMCB0byBjb2Rld29yZExlbmd0aC0xIGRvDQogICAg ICAgICAgICAgICAgICAgIGlmIHRyYW5zbWl0dGVkQ29kZXdvcmQuKGkpIDw+IGhhcmRCaXQgY2hh bm5lbExMUi4oaSkgdGhlbiBpbmNyIG51bWJlck9mQ2hhbm5lbEJpdEVycm9ycw0KICAgICAgICAg ICAgICAgIGRvbmU7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAg ICAgICAgIHRvdGFsTnVtYmVyT2ZDaGFubmVsQml0RXJyb3JzIDo9ICF0b3RhbE51bWJlck9mQ2hh bm5lbEJpdEVycm9ycyArLiBmbG9hdF9vZl9pbnQgIW51bWJlck9mQ2hhbm5lbEJpdEVycm9yczsN CiAgICAgICAgICAgICAgICB0b3RhbE51bWJlck9mQml0cyA6PSAhdG90YWxOdW1iZXJPZkJpdHMg Ky4gZmxvYXRfb2ZfaW50IGNvZGV3b3JkTGVuZ3RoOw0KICAgICAgICAgICAgZW5kOyAgICAgICAg IA0KICAgICAgICANCiAgICAgICAgICAgIGxldCBudW1iZXJPZkl0ZXJhdGlvbnMgPSByZWYgMCBp biAgDQogICAgICAgICAgICAgICAgbGV0IG51bWJlck9mRGVjb2RlZEJpdEVycm9ycyA9IGxkcGNE ZWNvZGUgdHJhbnNtaXR0ZWRDb2Rld29yZCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5kcm9tZQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxMTFIgDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVj b2RlZENvZGV3b3JkIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9uZUNvbHVtbkluUm93IA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpPbmVDb2x1bW5JblJvdyANCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNz YWdlc1N5bWJvbE5vZGVJbiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkl0ZXJhdGlvbnMgaW4gYmVnaW4NCiAgICAgICAg ICAgICAgICAgICAgdG90YWxOdW1iZXJPZkRlY29kZWRCaXRFcnJvcnMgOj0gIXRvdGFsTnVtYmVy T2ZEZWNvZGVkQml0RXJyb3JzICsuIGZsb2F0X29mX2ludCBudW1iZXJPZkRlY29kZWRCaXRFcnJv cnM7IA0KICAgICAgICAgICAgICAgICAgICB0b3RhbE51bWJlck9mSXRlcmF0aW9ucyA6PSAhdG90 YWxOdW1iZXJPZkl0ZXJhdGlvbnMgKy4gZmxvYXRfb2ZfaW50ICFudW1iZXJPZkl0ZXJhdGlvbnM7 DQogICAgICAgICAgICAgICAgICAgIGlmIG51bWJlck9mRGVjb2RlZEJpdEVycm9ycyA+IDAgdGhl biBpbmNyIHRvdGFsTnVtYmVyT2ZGcmFtZUVycm9yczsNCiAgICAgICAgICAgICAgICAgICAgaW5j ciB0b3RhbE51bWJlck9mRnJhbWVzOw0KICAgICAgICAgICAgICAgIGVuZDsNCg0KICAgICAgICAg ICAgaWYgKCF0b3RhbE51bWJlck9mRnJhbWVzIG1vZCAxMDApID0gMCB0aGVuIGJlZ2luICAgICAg ICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBsZXQgYXZnQ2hhbm5lbEJFUiA9ICF0 b3RhbE51bWJlck9mQ2hhbm5lbEJpdEVycm9ycyAvLiAhdG90YWxOdW1iZXJPZkJpdHMgaW4gDQog ICAgICAgICAgICAgICAgbGV0IGF2Z0RlY29kZWRCRVIgPSAhdG90YWxOdW1iZXJPZkRlY29kZWRC aXRFcnJvcnMgLy4gIXRvdGFsTnVtYmVyT2ZCaXRzIGluIA0KICAgICAgICAgICAgICAgIGxldCBh dmdGRVIgPSBmbG9hdF9vZl9pbnQgIXRvdGFsTnVtYmVyT2ZGcmFtZUVycm9ycyAvLiBmbG9hdF9v Zl9pbnQgIXRvdGFsTnVtYmVyT2ZGcmFtZXMgaW4gDQogICAgICAgICAgICAgICAgbGV0IGF2Z0l0 ZXIgPSAhdG90YWxOdW1iZXJPZkl0ZXJhdGlvbnMgLy4gZmxvYXRfb2ZfaW50ICF0b3RhbE51bWJl ck9mRnJhbWVzIGluIA0KICAgICAgICAgICAgICAgIGJlZ2luDQogICAgICAgICAgICAgICAgICAg IHByaW50X2ludCAhdG90YWxOdW1iZXJPZkZyYW1lczsNCiAgICAgICAgICAgICAgICAgICAgcHJp bnRfc3RyaW5nICJcdENoYW5uZWxCRVIgPSAiOw0KICAgICAgICAgICAgICAgICAgICBwcmludF9m bG9hdCBhdmdDaGFubmVsQkVSOw0KICAgICAgICAgICAgICAgICAgICBwcmludF9zdHJpbmcgIlx0 RGVjb2RlZEJFUiA9ICI7DQogICAgICAgICAgICAgICAgICAgIHByaW50X2Zsb2F0IGF2Z0RlY29k ZWRCRVI7DQogICAgICAgICAgICAgICAgICAgIHByaW50X3N0cmluZyAiXHRGRVIgPSAiOw0KICAg ICAgICAgICAgICAgICAgICBwcmludF9mbG9hdCBhdmdEZWNvZGVkQkVSOw0KICAgICAgICAgICAg ICAgICAgICBwcmludF9zdHJpbmcgIlx0YXZnSXRlciA9ICI7DQogICAgICAgICAgICAgICAgICAg IHByaW50X2Zsb2F0IGF2Z0l0ZXI7DQogICAgICAgICAgICAgICAgICAgIHByaW50X3N0cmluZyAi XG4iOw0KICAgICAgICAgICAgICAgICAgICBmbHVzaCBzdGRvdXQ7DQogICAgICAgICAgICAgICAg ZW5kICAgICANCiAgICAgICAgICAgIGVuZA0KICAgICAgICBkb25lDQogICAgZW5kOw0KICAgIGVi T3Zlck5vRGIgOj0gIWViT3Zlck5vRGIgKy4gZWJPdmVyTm9EYlN0ZXA7DQpkb25lOzsNCiAgICAg ICAgICAgIA0KcHJpbnRfc3RyaW5nICJcblxuU3VjY2VzZnVsIGNvbXBsZXRpb24gaW4gIjs7DQpw cmludF9mbG9hdCAoU3lzLnRpbWUoKSk7Ow0KcHJpbnRfc3RyaW5nICIgc2Vjb25kcyFcbiI7Ow0K DQoNCg== --=_mixed 003A2397C12570D8_=--