From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Kangas Newsgroups: gmane.emacs.bugs Subject: bug#56560: [PATCH] Delete fast-lock.el and lazy-lock.el Date: Thu, 14 Jul 2022 11:45:47 -0700 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000068b7eb05e3c84fda" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="11338"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Stefan Monnier To: 56560@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Jul 14 20:57:08 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oC41L-0002p9-KI for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 14 Jul 2022 20:57:07 +0200 Original-Received: from localhost ([::1]:48624 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oC41K-0005M9-Ea for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 14 Jul 2022 14:57:06 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40742) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oC3qc-0003Me-Oe for bug-gnu-emacs@gnu.org; Thu, 14 Jul 2022 14:46:18 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:41112) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oC3qc-0005ws-12 for bug-gnu-emacs@gnu.org; Thu, 14 Jul 2022 14:46:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oC3qb-0002Je-Sr; Thu, 14 Jul 2022 14:46:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Kangas Original-Sender: "Debbugs-submit" Resent-CC: monnier@iro.umontreal.ca, bug-gnu-emacs@gnu.org Resent-Date: Thu, 14 Jul 2022 18:46:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 56560 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: Stefan Monnier Original-Received: via spool by submit@debbugs.gnu.org id=B.16578243568886 (code B ref -1); Thu, 14 Jul 2022 18:46:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 14 Jul 2022 18:45:56 +0000 Original-Received: from localhost ([127.0.0.1]:38872 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oC3qW-0002JG-EN for submit@debbugs.gnu.org; Thu, 14 Jul 2022 14:45:56 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:37616) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oC3qV-0002J8-Fh for submit@debbugs.gnu.org; Thu, 14 Jul 2022 14:45:55 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40712) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oC3qV-0003ES-8v for bug-gnu-emacs@gnu.org; Thu, 14 Jul 2022 14:45:55 -0400 Original-Received: from mail-pf1-f172.google.com ([209.85.210.172]:35800) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oC3qQ-0005uQ-4a for bug-gnu-emacs@gnu.org; Thu, 14 Jul 2022 14:45:54 -0400 Original-Received: by mail-pf1-f172.google.com with SMTP id x184so2649965pfx.2 for ; Thu, 14 Jul 2022 11:45:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:mime-version:date:message-id:subject:to; bh=61CGvDroslUmXOFmQxPID0mY8cimMeSJW+Ew70tCDqo=; b=XkTsWNokgNsE7+IyUyFPGPbURwjTUxvJwuNJOKZddqS6rOzkVDUkMfL9eieqXxvG1h NzEcpTpEjnBktlB+QL5ZIGEK4KM8+HtbmUrmyI/etfE4/uCH2G8yZorlkPmQP2OJQwVr bczKWqMBWAS26wk9+eCgYC3dejb1z1OTIfVibXQX+9k+48gZrgiYPVzKsRthsBGwHBdf STlPzvfxA348Ve78ghW8mjP/ZXy/PMTtVWT0pEmtKwFyXeNo30tMB7JtalNbCnp319tf nom+lXOznye/aTzs4Qr7cfIeI6nbJKwmwPmUPkLAddblcxKqETxN7fLzbR/F+Ra3KWM3 /7rQ== X-Gm-Message-State: AJIora8+8tEkM4W3NQbnsoGza34nLKItpr8Opyrc5DMqT1h9oY8xU/a+ ROREWFLEPVSVG9foxLIvLFriw+npXsSdajUWPqD8zMMy X-Google-Smtp-Source: AGRyM1sIbUdfZNarXsaj485/Qcy2QE8dFgpEWFn9/6Lzchu+tNu7AN6gIE7/nz+U29B5pMnoLp0atee3fASWvj2EWkc= X-Received: by 2002:a05:6a00:b4d:b0:52a:f2cf:b0e4 with SMTP id p13-20020a056a000b4d00b0052af2cfb0e4mr9910815pfo.2.1657824348766; Thu, 14 Jul 2022 11:45:48 -0700 (PDT) Original-Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Thu, 14 Jul 2022 11:45:47 -0700 Received-SPF: pass client-ip=209.85.210.172; envelope-from=stefankangas@gmail.com; helo=mail-pf1-f172.google.com X-Spam_score_int: -13 X-Spam_score: -1.4 X-Spam_bar: - X-Spam_report: (-1.4 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:237033 Archived-At: --00000000000068b7eb05e3c84fda Content-Type: text/plain; charset="UTF-8" Severity: wishlist I guess it's high time to retire lazy-lock.el and fast-lock.el, obsolete since Emacs 22.1. The last time we discussed this, I proposed to obsolete the variable 'font-lock-support-mode'. It turns out that it is still useful for debugging, so the discussion got side-tracked and nothing came of it. In a new attempt, I submit here a new patch where this variable is turned into a defvar instead, so that it can still be used for debugging. Hopefully, this should be more palatable. --00000000000068b7eb05e3c84fda Content-Type: text/x-diff; charset="utf-8"; name="0001-Delete-fast-lock.el-and-lazy-lock.el.patch" Content-Disposition: attachment; filename="0001-Delete-fast-lock.el-and-lazy-lock.el.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: 2eb90ba385aee1d6_0.1 RnJvbSA2ZTczYWZlZDM0NzhiMDE4ZjU3Zjg1NjgxZDdhMTM3NzM4NTMyNzEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gS2FuZ2FzIDxzdGVmYW5AbWFyeGlzdC5zZT4KRGF0 ZTogVGh1LCAxNCBKdWwgMjAyMiAyMDoyNzowMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIERlbGV0 ZSBmYXN0LWxvY2suZWwgYW5kIGxhenktbG9jay5lbAoKVGhlICdmb250LWxvY2stc3VwcG9ydC1t b2RlJyBpcyBvY2Nhc2lvbmFsbHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKcHVycG9zZXMsIHNvIGl0 IHJlbWFpbnMgYXMgYSBkZWZ2YXIuClJlZjogaHR0cHM6Ly9saXN0cy5nbnUub3JnL3IvZW1hY3Mt ZGV2ZWwvMjAyMC0wOC9tc2cwMDEyNS5odG1sCgoqIGxpc3Avb2Jzb2xldGUvZmFzdC1sb2NrLmVs OgoqIGxpc3Avb2Jzb2xldGUvbGF6eS1sb2NrLmVsOiBEZWxldGUgbGlicmFyaWVzIG9ic29sZXRl IHNpbmNlIDIyLjEuCgoqIGxpc3AvZm9udC1sb2NrLmVsIChmb250LWxvY2stc3VwcG9ydC1tb2Rl KTogTWFrZSBpbnRvIGEgZGVmdmFyIGFuZApkZWxldGUgYW55IG1lbnRpb24gb2YgJ2xhenktbG9j ay1tb2RlJyBhbmQgJ2Zhc3QtbG9jay1tb2RlJy4KKGZvbnQtbG9jay10dXJuLW9uLXRoaW5nLWxv Y2ssIGZvbnQtbG9jay10dXJuLW9mZi10aGluZy1sb2NrKToKRHJvcCBzdXBwb3J0IGZvciBvYnNv bGV0ZSBtb2RlcyBsYXp5LWxvY2sgYW5kIGZhc3QtbG9jay4KKGZvbnQtbG9jay1hZnRlci1mb250 aWZ5LWJ1ZmZlcikKKGZvbnQtbG9jay1hZnRlci11bmZvbnRpZnktYnVmZmVyKTogTWFrZSBpbnRv IG9ic29sZXRlIGZ1bmN0aW9uCmFsaWFzZXMgZm9yICdpZ25vcmUnLiAgQWRqdXN0IGNhbGxlcnMu Cihmb250LWxvY2sta2V5d29yZHMsIGZvbnQtbG9jay1pbmhpYml0LXRoaW5nLWxvY2spOiBBZGp1 c3QKZG9jdW1lbnRhdGlvbiB0byBub3QgbWVudGlvbiBsYXp5LWxvY2sgYW5kIGZhc3QtbG9jay4K KiBsaXNwL2ZvbnQtY29yZS5lbCAoZm9udC1sb2NrLWRlZmF1bHRzKTogQWRqdXN0IGRvY3VtZW50 YXRpb24gdG8Kbm90IG1lbnRpb24gJ2ZvbnQtbG9jay1pbmhpYml0LXRoaW5nLWxvY2snLgoqIGxp c3AvbWFpbC9ybWFpbC5lbCAocm1haWwtdmFyaWFibGVzKTogRG9uJ3QgaW5oaWJpdCBvYnNvbGV0 ZQpsYXp5LWxvY2stbW9kZSBhbmQgZmFzdC1sb2NrLW1vZGUuCi0tLQogZXRjL05FV1MgICAgICAg ICAgICAgICAgICAgfCAgICA4ICsKIGxpc3AvZm9udC1jb3JlLmVsICAgICAgICAgIHwgICAgMiAr LQogbGlzcC9mb250LWxvY2suZWwgICAgICAgICAgfCAgMTAzICstLS0KIGxpc3AvbWFpbC9ybWFp bC5lbCAgICAgICAgIHwgICAgMyArLQogbGlzcC9vYnNvbGV0ZS9mYXN0LWxvY2suZWwgfCAgNzMw IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpc3Avb2Jzb2xldGUvbGF6eS1sb2NrLmVsIHwg MTAyNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDYgZmlsZXMgY2hhbmdl ZCwgMjIgaW5zZXJ0aW9ucygrKSwgMTg0OSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBsaXNwL29ic29sZXRlL2Zhc3QtbG9jay5lbAogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpc3Avb2Jz b2xldGUvbGF6eS1sb2NrLmVsCgpkaWZmIC0tZ2l0IGEvZXRjL05FV1MgYi9ldGMvTkVXUwppbmRl eCA1Nzg0NWRmOTc5Li5lYmVhOWVmMjQ4IDEwMDY0NAotLS0gYS9ldGMvTkVXUworKysgYi9ldGMv TkVXUwpAQCAtMzI1LDYgKzMyNSwxNCBAQCBzdGFydHVwLiAgUHJldmlvdXNseSwgdGhlc2UgZnVu Y3Rpb25zIGlnbm9yZWQKICoqIFRoZSBybG9naW4uZWwgbGlicmFyeSBhbmQgJ3JzaCcgY29tbWFu ZCBhcmUgbm93IG9ic29sZXRlLgogVXNlIHNvbWV0aGluZyBsaWtlICdNLXggc2hlbGwgUkVUIHNz aCA8aG9zdD4gUkVUJyBpbnN0ZWFkLgogCistLS0KKyoqIFRoZSBmYXN0LWxvY2suZWwgYW5kIGxh enktbG9jay5lbCBsaWJyYXJ5IGhhdmUgYmVlbiByZW1vdmVkLgorVGhleSBoYXZlIGJlZW4gb2Jz b2xldGUgc2luY2UgRW1hY3MgMjIuMS4KKworVGhlIHZhcmlhYmxlICdmb250LWxvY2stc3VwcG9y dC1tb2RlJyBpcyBvY2Nhc2lvbmFsbHkgdXNlZnVsIGZvcgorZGVidWdnaW5nIHB1cnBvc2VzLiAg SXQgaXMgbm93IGEgcmVndWxhciB2YXJpYWJsZSAoaW5zdGVhZCBvZiBhIHVzZXIKK29wdGlvbikg YW5kIGNhbiBiZSBzZXQgdG8gbmlsIHRvIGRpc2FibGUgSnVzdC1pbi10aW1lIExvY2sgbW9kZS4K KwogDAogKiBDaGFuZ2VzIGluIEVtYWNzIDI5LjEKIApkaWZmIC0tZ2l0IGEvbGlzcC9mb250LWNv cmUuZWwgYi9saXNwL2ZvbnQtY29yZS5lbAppbmRleCBmOTJkMWUzODMwLi5mNzBjNDJiYjAzIDEw MDY0NAotLS0gYS9saXNwL2ZvbnQtY29yZS5lbAorKysgYi9saXNwL2ZvbnQtY29yZS5lbApAQCAt NjUsNyArNjUsNyBAQCBmb250LWxvY2stZGVmYXVsdHMKIGBmb250LWxvY2stc3ludGFjdGljLWtl eXdvcmRzJyBhbmQgdGhvc2UgZm9yIGJ1ZmZlci1zcGVjaWFsaXplZCBmb250aWZpY2F0aW9uCiBm dW5jdGlvbnMsIGBmb250LWxvY2stZm9udGlmeS1idWZmZXItZnVuY3Rpb24nLAogYGZvbnQtbG9j ay11bmZvbnRpZnktYnVmZmVyLWZ1bmN0aW9uJywgYGZvbnQtbG9jay1mb250aWZ5LXJlZ2lvbi1m dW5jdGlvbicsCi1gZm9udC1sb2NrLXVuZm9udGlmeS1yZWdpb24tZnVuY3Rpb24nLCBhbmQgYGZv bnQtbG9jay1pbmhpYml0LXRoaW5nLWxvY2snLiIpCitgZm9udC1sb2NrLXVuZm9udGlmeS1yZWdp b24tZnVuY3Rpb24nLiIpCiA7OyBBdXRvbG9hZCBpZiB0aGlzIGZpbGUgbm8gbG9uZ2VyIGR1bXBl ZC4KIDs7OyMjI2F1dG9sb2FkCiAocHV0ICdmb250LWxvY2stZGVmYXVsdHMgJ3Jpc2t5LWxvY2Fs LXZhcmlhYmxlIHQpCmRpZmYgLS1naXQgYS9saXNwL2ZvbnQtbG9jay5lbCBiL2xpc3AvZm9udC1s b2NrLmVsCmluZGV4IDE4MWE3ZGM5MGUuLjA5ZTQ2ZWY0MjQgMTAwNjQ0Ci0tLSBhL2xpc3AvZm9u dC1sb2NrLmVsCisrKyBiL2xpc3AvZm9udC1sb2NrLmVsCkBAIC00OTAsOCArNDkwLDcgQEAgZm9u dC1sb2NrLWtleXdvcmRzCiBUaGVzZSByZWd1bGFyIGV4cHJlc3Npb25zIGNhbiBtYXRjaCB0ZXh0 IHdoaWNoIHNwYW5zIGxpbmVzLAogYWx0aG91Z2ggaXQgaXMgYmV0dGVyIHRvIGF2b2lkIGl0IGlm IHBvc3NpYmxlIHNpbmNlIHVwZGF0aW5nIHRoZW0KIHdoaWxlIGVkaXRpbmcgdGV4dCBpcyBzbG93 ZXIsIGFuZCBpdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZQotYWx3YXlzIGNvcnJlY3Qgd2hlbiB1 c2luZyBzdXBwb3J0IG1vZGVzIGxpa2Ugaml0LWxvY2sgb3IKLWxhenktbG9jay4KK2Fsd2F5cyBj b3JyZWN0LgogCiBUaGlzIHZhcmlhYmxlIGlzIHNldCBieSBtYWpvciBtb2RlcyB2aWEgdGhlIHZh cmlhYmxlCiBgZm9udC1sb2NrLWRlZmF1bHRzJy4gIEJlIGNhcmVmdWwgd2hlbiBjb21wb3Npbmcg cmVnZXhwcyBmb3IgdGhpcwpAQCAtNjIzLDExICs2MjIsOCBAQCBmb250LWxvY2stdW5mb250aWZ5 LXJlZ2lvbi1mdW5jdGlvbgogSXQgc2hvdWxkIHRha2UgdHdvIGFyZ3MsIHRoZSBiZWdpbm5pbmcg YW5kIGVuZCBvZiB0aGUgcmVnaW9uLgogVGhpcyBpcyBub3JtYWxseSBzZXQgdmlhIGBmb250LWxv Y2stZGVmYXVsdHMnLiIpCiAKLShkZWZ2YXIgZm9udC1sb2NrLWluaGliaXQtdGhpbmctbG9jayBu aWwKLSAgIkxpc3Qgb2YgRm9udCBMb2NrIG1vZGUgcmVsYXRlZCBtb2RlcyB0aGF0IHNob3VsZCBu b3QgYmUgdHVybmVkIG9uLgotQ3VycmVudGx5LCB2YWxpZCBtb2RlIG5hbWVzIGFyZSBgZmFzdC1s b2NrLW1vZGUnLCBgaml0LWxvY2stbW9kZScgYW5kCi1gbGF6eS1sb2NrLW1vZGUnLiAgVGhpcyBp cyBub3JtYWxseSBzZXQgdmlhIGBmb250LWxvY2stZGVmYXVsdHMnLiIpCi0obWFrZS1vYnNvbGV0 ZS12YXJpYWJsZSAnZm9udC1sb2NrLWluaGliaXQtdGhpbmctbG9jayBuaWwgIjI1LjEiKQorKGRl ZnZhciBmb250LWxvY2staW5oaWJpdC10aGluZy1sb2NrIG5pbCkKKyhtYWtlLW9ic29sZXRlLXZh cmlhYmxlICdmb250LWxvY2staW5oaWJpdC10aGluZy1sb2NrICJpdCBkb2VzIG5vdGhpbmcuIiAi MjUuMSIpCiAKIChkZWZ2YXItbG9jYWwgZm9udC1sb2NrLW11bHRpbGluZSBuaWwKICAgIldoZXRo ZXIgZm9udC1sb2NrIHNob3VsZCBjYXRlciB0byBtdWx0aWxpbmUga2V5d29yZHMuCkBAIC02NDIs NyArNjM4LDYgQEAgZm9udC1sb2NrLWZvbnRpZmllZAogCiAoZXZhbC13aGVuLWNvbXBpbGUKICAg OzsKLSAgOzsgQm9ycm93ZWQgZnJvbSBsYXp5LWxvY2suZWwuCiAgIDs7IFdlIHVzZSB0aGlzIHRv IHByZXNlcnZlIG9yIHByb3RlY3QgdGhpbmdzIHdoZW4gbW9kaWZ5aW5nIHRleHQgcHJvcGVydGll cy4KICAgKGRlZm1hY3JvIHNhdmUtYnVmZmVyLXN0YXRlICgmcmVzdCBib2R5KQogICAgICJCaW5k IHZhcmlhYmxlcyBhY2NvcmRpbmcgdG8gVkFSTElTVCBhbmQgZXZhbCBCT0RZIHJlc3RvcmluZyBi dWZmZXIgc3RhdGUuIgpAQCAtODgxLDY1ICs4NzYsMTcgQEAgZm9udC1sb2NrLXJlbW92ZS1rZXl3 b3JkcwogDAogOzs7IEZvbnQgTG9jayBTdXBwb3J0IG1vZGUuCiAKLTs7IFRoaXMgaXMgdGhlIGNv ZGUgdXNlZCB0byBpbnRlcmZhY2UgZm9udC1sb2NrLmVsIHdpdGggYW55IG9mIGl0cyBhZGQtb24K LTs7IHBhY2thZ2VzLCBhbmQgcHJvdmlkZSB0aGUgdXNlciBpbnRlcmZhY2UuICBQYWNrYWdlcyB0 aGF0IGhhdmUgdGhlaXIgb3duCi07OyBsb2NhbCBidWZmZXIgZm9udGlmaWNhdGlvbiBmdW5jdGlv bnMgKHNlZSBiZWxvdykgbWF5IGhhdmUgdG8gY2FsbAotOzsgYGZvbnQtbG9jay1hZnRlci1mb250 aWZ5LWJ1ZmZlcicgYW5kL29yIGBmb250LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlcicKLTs7 IHRoZW1zZWx2ZXMuCi0KLShkZWZjdXN0b20gZm9udC1sb2NrLXN1cHBvcnQtbW9kZSAnaml0LWxv Y2stbW9kZQorKGRlZnZhciBmb250LWxvY2stc3VwcG9ydC1tb2RlICMnaml0LWxvY2stbW9kZQog ICAiU3VwcG9ydCBtb2RlIGZvciBGb250IExvY2sgbW9kZS4KLVN1cHBvcnQgbW9kZXMgc3BlZWQg dXAgRm9udCBMb2NrIG1vZGUgYnkgYmVpbmcgY2hvb3N5IGFib3V0IHdoZW4gZm9udGlmaWNhdGlv bgotb2NjdXJzLiAgVGhlIGRlZmF1bHQgc3VwcG9ydCBtb2RlLCBKdXN0LWluLXRpbWUgTG9jayBt b2RlIChzeW1ib2wKLWBqaXQtbG9jay1tb2RlJyksIGlzIHJlY29tbWVuZGVkLgotCi1PdGhlciwg b2xkZXIgc3VwcG9ydCBtb2RlcyBhcmUgRmFzdCBMb2NrIG1vZGUgKHN5bWJvbCBgZmFzdC1sb2Nr LW1vZGUnKSBhbmQKLUxhenkgTG9jayBtb2RlIChzeW1ib2wgYGxhenktbG9jay1tb2RlJykuICBT ZWUgdGhvc2UgbW9kZXMgZm9yIG1vcmUgaW5mby4KLUhvd2V2ZXIsIHRoZXkgYXJlIG5vIGxvbmdl ciByZWNvbW1lbmRlZCwgYXMgSnVzdC1pbi10aW1lIExvY2sgbW9kZSBpcyBiZXR0ZXIuCi0KIElm IG5pbCwgbWVhbnMgc3VwcG9ydCBmb3IgRm9udCBMb2NrIG1vZGUgaXMgbmV2ZXIgcGVyZm9ybWVk LgotSWYgYSBzeW1ib2wsIHVzZSB0aGF0IHN1cHBvcnQgbW9kZS4KLUlmIGEgbGlzdCwgZWFjaCBl bGVtZW50IHNob3VsZCBiZSBvZiB0aGUgZm9ybSAoTUFKT1ItTU9ERSAuIFNVUFBPUlQtTU9ERSks Ci13aGVyZSBNQUpPUi1NT0RFIGlzIGEgc3ltYm9sIG9yIHQgKG1lYW5pbmcgdGhlIGRlZmF1bHQp LiAgRm9yIGV4YW1wbGU6Ci0gKChjLW1vZGUgLiBmYXN0LWxvY2stbW9kZSkgKGMrKy1tb2RlIC4g ZmFzdC1sb2NrLW1vZGUpICh0IC4gbGF6eS1sb2NrLW1vZGUpKQotbWVhbnMgdGhhdCBGYXN0IExv Y2sgbW9kZSBpcyB1c2VkIHRvIHN1cHBvcnQgRm9udCBMb2NrIG1vZGUgZm9yIGJ1ZmZlcnMgaW4g QyBvcgotQysrIG1vZGVzLCBhbmQgTGF6eSBMb2NrIG1vZGUgaXMgdXNlZCB0byBzdXBwb3J0IEZv bnQgTG9jayBtb2RlIG90aGVyd2lzZS4KLQotVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMg dXNlZCB3aGVuIEZvbnQgTG9jayBtb2RlIGlzIHR1cm5lZCBvbi4iCi0gIDp0eXBlICcoY2hvaWNl IChjb25zdCA6dGFnICJub25lIiBuaWwpCi0JCSAoY29uc3QgOnRhZyAiZmFzdCBsb2NrIiBmYXN0 LWxvY2stbW9kZSkKLQkJIChjb25zdCA6dGFnICJsYXp5IGxvY2siIGxhenktbG9jay1tb2RlKQot CQkgKGNvbnN0IDp0YWcgImppdCBsb2NrIiBqaXQtbG9jay1tb2RlKQotCQkgKHJlcGVhdCA6bWVu dS10YWcgIm1vZGUgc3BlY2lmaWMiIDp0YWcgIm1vZGUgc3BlY2lmaWMiCi0JCQkgOnZhbHVlICgo dCAuIGppdC1sb2NrLW1vZGUpKQotCQkJIChjb25zIDp0YWcgIkluc3RhbmNlIgotCQkJICAgICAg IChyYWRpbyA6dGFnICJNb2RlIgotCQkJCSAgICAgIChjb25zdCA6dGFnICJhbGwiIHQpCi0JCQkJ ICAgICAgKHN5bWJvbCA6dGFnICJuYW1lIikpCi0JCQkgICAgICAgKHJhZGlvIDp0YWcgIlN1cHBv cnQiCi0JCQkJICAgICAgKGNvbnN0IDp0YWcgIm5vbmUiIG5pbCkKLQkJCQkgICAgICAoY29uc3Qg OnRhZyAiZmFzdCBsb2NrIiBmYXN0LWxvY2stbW9kZSkKLQkJCQkgICAgICAoY29uc3QgOnRhZyAi bGF6eSBsb2NrIiBsYXp5LWxvY2stbW9kZSkKLQkJCQkgICAgICAoY29uc3QgOnRhZyAiSklUIGxv Y2siIGppdC1sb2NrLW1vZGUpKSkKLQkJCSApKQotICA6dmVyc2lvbiAiMjEuMSIKLSAgOmdyb3Vw ICdmb250LWxvY2spCitUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KIAotKGRlZnZh ciBmYXN0LWxvY2stbW9kZSkKLShkZWZ2YXIgbGF6eS1sb2NrLW1vZGUpCi0oZGVmdmFyIGppdC1s b2NrLW1vZGUpCitUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdoZW4gRm9udCBM b2NrIG1vZGUgaXMgdHVybmVkIG9uLiIpCiAKLShkZWNsYXJlLWZ1bmN0aW9uIGZhc3QtbG9jay1h ZnRlci1mb250aWZ5LWJ1ZmZlciAiZmFzdC1sb2NrIikKLShkZWNsYXJlLWZ1bmN0aW9uIGZhc3Qt bG9jay1hZnRlci11bmZvbnRpZnktYnVmZmVyICJmYXN0LWxvY2siKQotKGRlY2xhcmUtZnVuY3Rp b24gZmFzdC1sb2NrLW1vZGUgImZhc3QtbG9jayIpCi0oZGVjbGFyZS1mdW5jdGlvbiBsYXp5LWxv Y2stYWZ0ZXItZm9udGlmeS1idWZmZXIgImxhenktbG9jayIpCi0oZGVjbGFyZS1mdW5jdGlvbiBs YXp5LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlciAibGF6eS1sb2NrIikKLShkZWNsYXJlLWZ1 bmN0aW9uIGxhenktbG9jay1tb2RlICJsYXp5LWxvY2siKQorKGRlZnZhciBqaXQtbG9jay1tb2Rl KQogCiAoZGVmdW4gZm9udC1sb2NrLXR1cm4tb24tdGhpbmctbG9jayAoKQogICAocGNhc2UgKGZv bnQtbG9jay12YWx1ZS1pbi1tYWpvci1tb2RlIGZvbnQtbG9jay1zdXBwb3J0LW1vZGUpCi0gICAg KCdmYXN0LWxvY2stbW9kZSAoZmFzdC1sb2NrLW1vZGUgdCkpCi0gICAgKCdsYXp5LWxvY2stbW9k ZSAobGF6eS1sb2NrLW1vZGUgdCkpCiAgICAgKCdqaXQtbG9jay1tb2RlCiAgICAgIDs7IFByZXBh cmUgZm9yIGppdC1sb2NrCiAgICAgIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9u cwpAQCAtOTYyLDM3ICs5MDksMTMgQEAgZm9udC1sb2NrLXR1cm4tb24tdGhpbmctbG9jawogICAg ICAgICAgICAgICAgbmlsIHQpKSkpCiAKIChkZWZ1biBmb250LWxvY2stdHVybi1vZmYtdGhpbmct bG9jayAoKQotICAoY29uZCAoKGJvdW5kLWFuZC10cnVlLXAgZmFzdC1sb2NrLW1vZGUpCi0JIChm YXN0LWxvY2stbW9kZSAtMSkpCi0JKChib3VuZC1hbmQtdHJ1ZS1wIGppdC1sb2NrLW1vZGUpCisg IChjb25kICgoYm91bmQtYW5kLXRydWUtcCBqaXQtbG9jay1tb2RlKQogCSAoaml0LWxvY2stdW5y ZWdpc3RlciAnZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uKQogCSA7OyBSZXNldCBsb2NhbCB2YXJz IHRvIHRoZSBub24taml0LWxvY2sgY2FzZS4KLQkgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2ZvbnQt bG9jay1mb250aWZ5LWJ1ZmZlci1mdW5jdGlvbikpCi0JKChib3VuZC1hbmQtdHJ1ZS1wIGxhenkt bG9jay1tb2RlKQotCSAobGF6eS1sb2NrLW1vZGUgLTEpKSkpCi0KLShkZWZ1biBmb250LWxvY2st YWZ0ZXItZm9udGlmeS1idWZmZXIgKCkKLSAgKGNvbmQgKChib3VuZC1hbmQtdHJ1ZS1wIGZhc3Qt bG9jay1tb2RlKQotCSAoZmFzdC1sb2NrLWFmdGVyLWZvbnRpZnktYnVmZmVyKSkKLQk7OyBVc2Vs ZXNzIG5vdyB0aGF0IGppdC1sb2NrIGludGVyY2VwdHMgZm9udC1sb2NrLWZvbnRpZnktYnVmZmVy LiAgLXNtCi0JOzsgKGppdC1sb2NrLW1vZGUKLQk7OyAgKGppdC1sb2NrLWFmdGVyLWZvbnRpZnkt YnVmZmVyKSkKLQkoKGJvdW5kLWFuZC10cnVlLXAgbGF6eS1sb2NrLW1vZGUpCi0JIChsYXp5LWxv Y2stYWZ0ZXItZm9udGlmeS1idWZmZXIpKSkpCi0KLShkZWZ1biBmb250LWxvY2stYWZ0ZXItdW5m b250aWZ5LWJ1ZmZlciAoKQotICAoY29uZCAoKGJvdW5kLWFuZC10cnVlLXAgZmFzdC1sb2NrLW1v ZGUpCi0JIChmYXN0LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlcikpCi0JOzsgVXNlbGVzcyBh cyB3ZWxsLiAgSXQncyBvbmx5IGNhbGxlZCB3aGVuOgotCTs7IC0gdHVybmluZyBvZmYgZm9udC1s b2NrOiBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgd2UgbGVhdmUgc3B1cmlvdXMKLQk7OyAgIGBmb250 aWZpZWQnIHRleHQgcHJvcHMgYXJvdW5kIHNpbmNlIGppdC1sb2NrLW1vZGUgaXMgYWxzbyBvZmYu Ci0JOzsgLSBmb250LWxvY2stZGVmYXVsdC1mb250aWZ5LWJ1ZmZlciBmYWlsczogdGhpcyBpcyBu b3QgcnVuCi0JOzsgICBhbnkgbW9yZSBhbnl3YXkuICAgLXNtCi0JOzsKLQk7OyAoaml0LWxvY2st bW9kZQotCTs7ICAoaml0LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlcikpCi0JKChib3VuZC1h bmQtdHJ1ZS1wIGxhenktbG9jay1tb2RlKQotCSAobGF6eS1sb2NrLWFmdGVyLXVuZm9udGlmeS1i dWZmZXIpKSkpCisgICAgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnZm9udC1sb2NrLWZvbnRp ZnktYnVmZmVyLWZ1bmN0aW9uKSkpKQorCisoZGVmaW5lLW9ic29sZXRlLWZ1bmN0aW9uLWFsaWFz ICdmb250LWxvY2stYWZ0ZXItZm9udGlmeS1idWZmZXIgIydpZ25vcmUgIjI5LjEiKQorKGRlZmlu ZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcyAnZm9udC1sb2NrLWFmdGVyLXVuZm9udGlmeS1idWZm ZXIgIydpZ25vcmUgIjI5LjEiKQogCiA7OyBFbmQgb2YgRm9udCBMb2NrIFN1cHBvcnQgbW9kZS4K IAwKQEAgLTExNjAsNyArMTA4Myw2IEBAIGZvbnQtbG9jay1kZWZhdWx0LWZvbnRpZnktYnVmZmVy CiAJICAgIChzYXZlLWV4Y3Vyc2lvbgogCSAgICAgIChzYXZlLW1hdGNoLWRhdGEKIAkJKGZvbnQt bG9jay1mb250aWZ5LXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSB2ZXJib3NlKQotCQko Zm9udC1sb2NrLWFmdGVyLWZvbnRpZnktYnVmZmVyKQogCQkoc2V0cSBmb250LWxvY2stZm9udGlm aWVkIHQpKSkKIAkgIDs7IFdlIGRvbid0IHJlc3RvcmUgdGhlIG9sZCBmb250aWZpY2F0aW9uLCBz byBpdCdzIGJlc3QgdG8gdW5mb250aWZ5LgogCSAgKHF1aXQgKGZvbnQtbG9jay11bmZvbnRpZnkt YnVmZmVyKSkpKSkpKQpAQCAtMTE3MSw3ICsxMDkzLDYgQEAgZm9udC1sb2NrLWRlZmF1bHQtdW5m b250aWZ5LWJ1ZmZlcgogICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICh3aWRlbikKICAgICAoZm9u dC1sb2NrLXVuZm9udGlmeS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkpCi0gICAgKGZv bnQtbG9jay1hZnRlci11bmZvbnRpZnktYnVmZmVyKQogICAgIChzZXRxIGZvbnQtbG9jay1mb250 aWZpZWQgbmlsKSkpCiAKIChkZWZ2YXIgZm9udC1sb2NrLWRvbnQtd2lkZW4gbmlsCmRpZmYgLS1n aXQgYS9saXNwL21haWwvcm1haWwuZWwgYi9saXNwL21haWwvcm1haWwuZWwKaW5kZXggNzFlZGE3 Y2QyYi4uNGJmZWMyMmIzYSAxMDA2NDQKLS0tIGEvbGlzcC9tYWlsL3JtYWlsLmVsCisrKyBiL2xp c3AvbWFpbC9ybWFpbC5lbApAQCAtMTQ1MSw4ICsxNDUxLDcgQEAgcm1haWwtdmFyaWFibGVzCiAg IChzZXRxLWxvY2FsIGZvbnQtbG9jay1kZWZhdWx0cwogICAgICAgICAgICAgICAnKHJtYWlsLWZv bnQtbG9jay1rZXl3b3JkcwogICAgICAgICAgICAgICAgIHQgdCBuaWwgbmlsCi0gICAgICAgICAg ICAgICAgKGZvbnQtbG9jay1kb250LXdpZGVuIC4gdCkKLSAgICAgICAgICAgICAgICAoZm9udC1s b2NrLWluaGliaXQtdGhpbmctbG9jayAuIChsYXp5LWxvY2stbW9kZSBmYXN0LWxvY2stbW9kZSkp KSkKKyAgICAgICAgICAgICAgICAoZm9udC1sb2NrLWRvbnQtd2lkZW4gLiB0KSkpCiAgIChzZXRx LWxvY2FsIHJlcXVpcmUtZmluYWwtbmV3bGluZSBuaWwpCiAgIChzZXRxLWxvY2FsIHZlcnNpb24t Y29udHJvbCAnbmV2ZXIpCiAgIChhZGQtaG9vayAna2lsbC1idWZmZXItaG9vayAjJ3JtYWlsLW1v ZGUta2lsbC1zdW1tYXJ5IG5pbCB0KQpkaWZmIC0tZ2l0IGEvbGlzcC9vYnNvbGV0ZS9mYXN0LWxv Y2suZWwgYi9saXNwL29ic29sZXRlL2Zhc3QtbG9jay5lbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMTYxNDkzNWYwMy4uMDAwMDAwMDAwMAotLS0gYS9saXNwL29ic29sZXRlL2Zhc3Qt bG9jay5lbAorKysgL2Rldi9udWxsCkBAIC0xLDczMCArMCwwIEBACi07OzsgZmFzdC1sb2NrLmVs IC0tLSBhdXRvbWFnaWMgdGV4dCBwcm9wZXJ0aWVzIGNhY2hpbmcgZm9yIGZhc3QgRm9udCBMb2Nr IG1vZGUgIC0qLSBsZXhpY2FsLWJpbmRpbmc6IHQ7IC0qLQotCi07OyBDb3B5cmlnaHQgKEMpIDE5 OTQtMTk5OCwgMjAwMS0yMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi07OyBB dXRob3I6IFNpbW9uIE1hcnNoYWxsIDxzaW1vbkBnbnUub3JnPgotOzsgTWFpbnRhaW5lcjogZW1h Y3MtZGV2ZWxAZ251Lm9yZwotOzsgS2V5d29yZHM6IGZhY2VzIGZpbGVzCi07OyBWZXJzaW9uOiAz LjE0Ci07OyBPYnNvbGV0ZS1zaW5jZTogMjIuMQotCi07OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBH TlUgRW1hY3MuCi0KLTs7IEdOVSBFbWFjcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci07OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotOzsgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLTs7 IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLTs7IEdOVSBFbWFjcyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotOzsgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LTs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLTs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0KLTs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCi07OyBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxo dHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0KLTs7OyBDb21tZW50YXJ5OgotCi07OyBG YXN0IExvY2sgbW9kZSBpcyBhIEZvbnQgTG9jayBzdXBwb3J0IG1vZGUuCi07OyBJdCBtYWtlcyB2 aXNpdGluZyBhIGZpbGUgaW4gRm9udCBMb2NrIG1vZGUgZmFzdGVyIGJ5IHJlc3RvcmluZyBpdHMg ZmFjZSB0ZXh0Ci07OyBwcm9wZXJ0aWVzIGZyb20gYXV0b21hdGljYWxseSBzYXZlZCBhc3NvY2lh dGVkIEZvbnQgTG9jayBjYWNoZSBmaWxlcy4KLTs7Ci07OyBTZWUgY2F2ZWF0cyBhbmQgZmVlZGJh Y2sgYmVsb3cuCi07OyBTZWUgYWxzbyB0aGUgbGF6eS1sb2NrIHBhY2thZ2UuICAoQnV0IGRvbid0 IHVzZSB0aGUgdHdvIGF0IHRoZSBzYW1lIHRpbWUhKQotCi07OyBJbnN0YWxsYXRpb246Ci07Owot OzsgUHV0IGluIHlvdXIgfi8uZW1hY3M6Ci07OwotOzsgKHNldHEgZm9udC1sb2NrLXN1cHBvcnQt bW9kZSAnZmFzdC1sb2NrLW1vZGUpCi07OwotOzsgU3RhcnQgdXAgYSBuZXcgRW1hY3MgYW5kIHVz ZSBmb250LWxvY2sgYXMgdXN1YWwgKGV4Y2VwdCB0aGF0IHlvdSBjYW4gdXNlIHRoZQotOzsgc28t Y2FsbGVkICJnYXVkaWVyIiBmb250aWZpY2F0aW9uIHJlZ2V4cHMgb24gYmlnIGZpbGVzIHdpdGhv dXQgZnJ1c3RyYXRpb24pLgotOzsKLTs7IFdoZW4geW91IHZpc2l0IGEgZmlsZSAod2hpY2ggaGFz IGBmb250LWxvY2stbW9kZScgZW5hYmxlZCkgdGhhdCBoYXMgYQotOzsgY29ycmVzcG9uZGluZyBG b250IExvY2sgY2FjaGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggaXQsIHRoZSBGb250IExvY2sgY2Fj aGUKLTs7IHdpbGwgYmUgbG9hZGVkIGZyb20gdGhhdCBmaWxlIGluc3RlYWQgb2YgYmVpbmcgZ2Vu ZXJhdGVkIGJ5IEZvbnQgTG9jayBjb2RlLgotCi07OyBDYXZlYXRzOgotOzsKLTs7IEEgY2FjaGUg d2lsbCBiZSBzYXZlZCB3aGVuIHZpc2l0aW5nIGEgY29tcHJlc3NlZCBmaWxlIHVzaW5nIGNyeXB0 KyssIGJ1dCBub3QKLTs7IGJlIHJlYWQuICBUaGlzIGlzIGEgImZlYXR1cmUiLyJjb25zZXF1ZW5j ZSIvImJ1ZyIgb2YgY3J5cHQrKy4KLTs7Ci07OyBWZXJzaW9uIGNvbnRyb2wgcGFja2FnZXMgYXJl IGxpa2VseSB0byBzdGFtcCBhbGwgb3ZlciBmaWxlIG1vZGlmaWNhdGlvbgotOzsgdGltZXMuICBU aGVyZWZvcmUgdGhlIGFjdCBvZiBjaGVja2luZyBvdXQgbWF5IGludmFsaWRhdGUgYSBjYWNoZS4K LQwKLTs7IEhpc3Rvcnk6Ci07OwotOzsgMC4wMi0tMS4wMDoKLTs7IC0gQ2hhbmdlZCBuYW1lIGZy b20gdHVyYm8tcHJvcCB0byBmYXN0LWxvY2suICBBdXRvbWFnaWMgZm9yIGZvbnQtbG9jayBvbmx5 Ci07OyAtIE1hZGUgYGZhc3QtbG9jay1tb2RlJyBhIG1pbm9yIG1vZGUsIGxpa2UgRy4gRGluZXNo IER1dHQncyBmc3MtbW9kZQotOzsgMS4wMC0tMS4wMToKLTs7IC0gVHVybiBvbiBgZmFzdC1sb2Nr LW1vZGUnIG9ubHkgaWYgYGJ1ZmZlci1maWxlLW5hbWUnIG9yIGBpbnRlcmFjdGl2ZS1wJwotOzsg LSBNYWRlIGBmYXN0LWxvY2stZmlsZS1uYW1lJyB1c2UgYGJ1ZmZlci1uYW1lJyBpZiBgYnVmZmVy LWZpbGUtbmFtZScgaXMgbmlsCi07OyAtIE1vdmVkIHNhdmUtYWxsIGNvbmRpdGlvbnMgdG8gYGZh c3QtbG9jay1zYXZlLWNhY2hlJwotOzsgLSBBZGRlZCBgZmFzdC1sb2NrLXNhdmUtdGV4dC1wcm9w ZXJ0aWVzJyB0byBga2lsbC1idWZmZXItaG9vaycKLTs7IDEuMDEtLTIuMDA6IGNvbXBsZXRlIHJl d3JpdGUtLS1ub3Qgd29ydGggdGhlIHNwYWNlIHRvIGRvY3VtZW50Ci07OyAtIENoYW5nZWQgc3Ry dWN0dXJlIG9mIHRleHQgcHJvcGVydGllcyBjYWNoZSBhbmQgdGhyZXcgb3V0IGZpbGUgbW9kIGNo ZWNrcwotOzsgMi4wMC0tMi4wMToKLTs7IC0gTWFkZSBgY29uZGl0aW9uLWNhc2UnIGZvcm1zIHVu ZGVyc3RhbmQgYHF1aXQnLgotOzsgLSBNYWRlIGBmYXN0LWxvY2snIHJlcXVpcmUgYGZvbnQtbG9j aycKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLWNhY2hlLW5hbWUnIGNoYXNlIGxpbmtzIChmcm9tIEJl biBMaWJsaXQpCi07OyAyLjAxLS0zLjAwOgotOzsgLSBDaGFuZ2VkIHN0cnVjdHVyZSBvZiBjYWNo ZSB0byBpbmNsdWRlIGBmb250LWxvY2sta2V5d29yZHMnIChmcm9tIHJtcykKLTs7IC0gQ2hhbmdl ZCBgZmFzdC1sb2NrLWNhY2hlLW1lY2hhbmlzbXMnIHRvIGBmYXN0LWxvY2stY2FjaGUtZGlyZWN0 b3JpZXMnCi07OyAtIFJlbW92ZWQgYGZhc3QtbG9jay1yZWFkLW90aGVycycKLTs7IC0gTWFkZSBg ZmFzdC1sb2NrLXJlYWQtY2FjaGUnIGlnbm9yZSBjYWNoZSBvd25lcgotOzsgLSBNYWRlIGBmYXN0 LWxvY2stc2F2ZS1jYWNoZS1leHRlcm5hbCcgY3JlYXRlIGNhY2hlIGRpcmVjdG9yeQotOzsgLSBN YWRlIGBmYXN0LWxvY2stc2F2ZS1jYWNoZS1leHRlcm5hbCcgc2F2ZSBgZm9udC1sb2NrLWtleXdv cmRzJwotOzsgLSBNYWRlIGBmYXN0LWxvY2stY2FjaGUtZGF0YScgY2hlY2sgYGZvbnQtbG9jay1r ZXl3b3JkcycKLTs7IDMuMDAtLTMuMDE6IGluY29ycG9yYXRlZCBwb3J0IG9mIDIuMDAgdG8gTHVj aWQsIG1hZGUgYnkgQmFycnkgV2Fyc2F3Ci07OyAtIFBhY2thZ2Ugbm93IHByb3ZpZGVzIGl0c2Vs ZgotOzsgLSBMdWNpZDogVXNlIGBmb250LWxvY2stYW55LWV4dGVudHMtcCcgZm9yIGBmb250LWxv Y2stYW55LXByb3BlcnRpZXMtcCcKLTs7IC0gTHVjaWQ6IFVzZSBgbGlzdC1mYWNlcycgZm9yIGBm YWNlLWxpc3QnCi07OyAtIEx1Y2lkOiBBZGRlZCBgc2V0LXRleHQtcHJvcGVydGllcycKLTs7IC0g THVjaWQ6IE1hZGUgYHR1cm4tb24tZmFzdC1sb2NrJyBwYXNzIDEgbm90IHQgdG8gYGZhc3QtbG9j ay1tb2RlJwotOzsgLSBSZW1vdmVkIHRlc3QgZm9yIGBmYXN0LWxvY2stbW9kZScgZnJvbSBgZmFz dC1sb2NrLXJlYWQtY2FjaGUnCi07OyAtIEx1Y2lkOiBBZGRlZCBMdWNpZC1zcGVjaWZpYyBgZmFz dC1sb2NrLWdldC1mYWNlLXByb3BlcnRpZXMnCi07OyAzLjAxLS0zLjAyOiBub3cgd29ya3Mgd2l0 aCBMdWNpZCBFbWFjcywgdGhhbmtzIHRvIEJhcnJ5IFdhcnNhdwotOzsgLSBNYWRlIGBmYXN0LWxv Y2stY2FjaGUtbmFtZScgbWFwICI6IiB0byAiOyIgZm9yIE9TLzIgKGZyb20gU2VyZ2Fub3ZhIFZl cmEpCi07OyAtIE1hZGUgYGZhc3QtbG9jay1jYWNoZS1uYW1lJyB1c2UgYWJicmV2aWF0ZWQgZmls ZSBuYW1lIChmcm9tIEJhcnJ5IFdhcnNhdykKLTs7IC0gTHVjaWQ6IFNlcGFyYXRlZCBoYW5kbGVy cyBmb3IgYGVycm9yJyBhbmQgYHF1aXQnIGZvciBgY29uZGl0aW9uLWNhc2UnCi07OyAzLjAyLS0z LjAzOgotOzsgLSBDaGFuZ2VkIGBmYXN0LWxvY2stc2F2ZS1jYWNoZS1leHRlcm5hbCcgdG8gYGZh c3QtbG9jay1zYXZlLWNhY2hlLWRhdGEnCi07OyAtIEx1Y2lkOiBBZGRlZCBMdWNpZC1zcGVjaWZp YyBgZmFzdC1sb2NrLXNldC1mYWNlLXByb3BlcnRpZXMnCi07OyAzLjAzLS0zLjA0OgotOzsgLSBD b3JyZWN0ZWQgYHN1YnJwJyB0ZXN0IG9mIEx1Y2lkIGNvZGUKLTs7IC0gUmVwbGFjZWQgYGZvbnQt bG9jay1hbnktcHJvcGVydGllcy1wJyB3aXRoIGB0ZXh0LXByb3BlcnR5LW5vdC1hbGwnCi07OyAt IEx1Y2lkOiBNYWRlIGBmYXN0LWxvY2stc2V0LWZhY2UtcHJvcGVydGllcycgcHV0IGB0ZXh0LXBy b3AnIG9uIGV4dGVudHMKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLWNhY2hlLWRpcmVjdG9yaWVzJyBh IHJlZ2V4cCBhbGlzdCAoZnJvbSBDb2xpbiBSYWZmZXJ0eSkKLTs7IC0gTWFkZSBgZmFzdC1sb2Nr LWNhY2hlLWRpcmVjdG9yeScgdG8gcmV0dXJuIGEgdXNhYmxlIGNhY2hlIGZpbGUgZGlyZWN0b3J5 Ci07OyAzLjA0LS0zLjA1OgotOzsgLSBMdWNpZDogRml4IGZvciBYRW1hY3MgMTkuMTEgYHRleHQt cHJvcGVydHktbm90LWFsbCcKLTs7IC0gUmVwbGFjZWQgYHN1YnJwJyB0ZXN0IG9mIEx1Y2lkIGNv ZGUgd2l0aCBgZW1hY3MtdmVyc2lvbicgYHN0cmluZy1tYXRjaCcKLTs7IC0gTWFkZSBgYnl0ZS1j b21waWxlLXdhcm5pbmdzJyBvbWl0IGB1bnJlc29sdmVkJyBvbiBjb21waWxhdGlvbgotOzsgLSBN YWRlIGBmYXN0LWxvY2stc2F2ZS1jYWNoZS1kYXRhJyB1c2UgYSBidWZmZXIgKGZyb20gUmljayBT bGFka2V5KQotOzsgLSBSZXZlcnRlZCB0byBvbGQgYGZhc3QtbG9jay1nZXQtZmFjZS1wcm9wZXJ0 aWVzJyAoZnJvbSBSaWNrIFNsYWRrZXkpCi07OyAzLjA1LS0zLjA2OiBpbmNvcnBvcmF0ZWQgaGFj ayBvZiAzLjAzLCBtYWRlIGJ5IEpvbmF0aGFuIFN0aWdlbG1hbiAoU3RpZykKLTs7IC0gUmV2ZXJ0 ZWQgdG8gMy4wNCB2ZXJzaW9uIG9mIGBmYXN0LWxvY2stZ2V0LWZhY2UtcHJvcGVydGllcycKLTs7 IC0gWEVtYWNzOiBSZW1vdmVkIGBsaXN0LWZhY2VzJyBgZGVmYWxpYXMnCi07OyAtIE1hZGUgYGZh c3QtbG9jay1tb2RlJyBhbmQgYHR1cm4tb24tZmFzdC1sb2NrJyBzdWNjZWVkIGBhdXRvbG9hZCcg Y29va2llcwotOzsgLSBBZGRlZCBgZmFzdC1sb2NrLXN1Ym1pdC1idWctcmVwb3J0JwotOzsgLSBS ZW5hbWVkIGBmYXN0LWxvY2stc2F2ZS1zaXplJyB0byBgZmFzdC1sb2NrLW1pbmltdW0tc2l6ZScK LTs7IC0gTWFkZSBgZmFzdC1sb2NrLXNhdmUtY2FjaGUnIG91dHB1dCBhIG1lc3NhZ2UgaWYgbm8g c2F2ZSBldmVyIGF0dGVtcHRlZAotOzsgLSBNYWRlIGBmYXN0LWxvY2stc2F2ZS1jYWNoZS1kYXRh JyBvdXRwdXQgYSBtZXNzYWdlIGlmIHNhdmUgYXR0ZW1wdGVkCi07OyAtIE1hZGUgYGZhc3QtbG9j ay1jYWNoZS1kYXRhJyBvdXRwdXQgYSBtZXNzYWdlIGlmIGxvYWQgYXR0ZW1wdGVkCi07OyAtIE1h ZGUgYGZhc3QtbG9jay1zYXZlLWNhY2hlLWRhdGEnIGRvIGBjb25kaXRpb24tY2FzZScgbm90IGB1 bndpbmQtcHJvdGVjdCcKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLXNhdmUtY2FjaGUnIGFuZCBgZmFz dC1sb2NrLXJlYWQtY2FjaGUnIHJldHVybiBub3RoaW5nCi07OyAtIE1hZGUgYGZhc3QtbG9jay1z YXZlLWNhY2hlJyBjaGVjayBgYnVmZmVyLW1vZGlmaWVkLXAnIChTdGlnKQotOzsgLSBBZGRlZCBg ZmFzdC1sb2NrLXNhdmUtZXZlbnRzJwotOzsgLSBBZGRlZCBgZmFzdC1sb2NrLWFmdGVyLXNhdmUt aG9vaycgdG8gYGFmdGVyLXNhdmUtaG9vaycgKFN0aWcpCi07OyAtIEFkZGVkIGBmYXN0LWxvY2st a2lsbC1idWZmZXItaG9vaycgdG8gYGtpbGwtYnVmZmVyLWhvb2snCi07OyAtIENoYW5nZWQgYGZh c3QtbG9jay1zYXZlLWNhY2hlcycgdG8gYGZhc3QtbG9jay1raWxsLWVtYWNzLWhvb2snCi07OyAt IEFkZGVkIGBmYXN0LWxvY2sta2lsbC1lbWFjcy1ob29rJyB0byBga2lsbC1lbWFjcy1ob29rJwot OzsgLSBNYWRlIGBmYXN0LWxvY2stc2F2ZS1jYWNoZScgY2hlY2sgYHZlcmlmeS12aXNpdGVkLWZp bGUtbW9kdGltZScgKFN0aWcpCi07OyAtIE1hZGUgYHZpc2l0ZWQtZmlsZS1tb2R0aW1lJyBiZSB0 aGUgYmFzaXMgb2YgdGhlIHRpbWVzdGFtcCAoU3RpZykKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLXNh dmUtY2FjaGUtMScgYW5kIGBmYXN0LWxvY2stY2FjaGUtZGF0YScgdXNlL3JlZm9ybWF0IGl0Ci07 OyAtIEFkZGVkIGBmYXN0LWxvY2stY2FjaGUtZmlsZW5hbWUnIHRvIGtlZXAgdHJhY2sgb2YgdGhl IGNhY2hlIGZpbGUgbmFtZQotOzsgLSBBZGRlZCBgZmFzdC1sb2NrLWFmdGVyLWZvbnRpZnktYnVm ZmVyJwotOzsgLSBBZGRlZCBgZmFzdC1sb2NrLXNhdmUtZmFjZXMnIGxpc3Qgb2YgZmFjZXMgdG8g c2F2ZSAoaWRlYSBmcm9tIFN0aWcvVGlib3IpCi07OyAtIE1hZGUgYGZhc3QtbG9jay1nZXQtZmFj ZS1wcm9wZXJ0aWVzJyBmdW5jdGlvbnMgdXNlIGl0Ci07OyAtIFhFbWFjczogTWFkZSBgZmFzdC1s b2NrLXNldC1mYWNlLXByb3BlcnRpZXMnIGRvIGV4dGVudHMgdGhlIEZvbnQgTG9jayB3YXkKLTs7 IC0gWEVtYWNzOiBSZW1vdmVkIGZpeCBmb3IgYHRleHQtcHJvcGVydHktbm90LWFsbCcgKDE5LjEx IHN1cHBvcnQgZHJvcHBlZCkKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLW1vZGUnIGVuc3VyZSBgZm9u dC1sb2NrLW1vZGUnIGlzIG9uCi07OyAtIE1hZGUgYGZhc3QtbG9jay1zYXZlLWNhY2hlJyBkbyBg Y2RyLXNhZmUnIG5vdCBgY2RyJyAoZnJvbSBEYXZlIEZvc3RlcikKLTs7IC0gTWFkZSBgZmFzdC1s b2NrLXNhdmUtY2FjaGUnIGRvIGBzZXQtYnVmZmVyJyBmaXJzdCAoZnJvbSBEYXZlIEZvc3RlcikK LTs7IC0gTWFkZSBgZmFzdC1sb2NrLXNhdmUtY2FjaGUnIGxvb3AgdW50aWwgc2F2ZWQgb3IgcXVp dCAoZnJvbSBHZW9yZyBOaWtvZHltKQotOzsgLSBNYWRlIGBmYXN0LWxvY2stY2FjaGUtZGF0YScg Y2hlY2sgYGJ1ZmZlci1tb2RpZmllZC1wJwotOzsgLSBNYWRlIGBmYXN0LWxvY2stY2FjaGUtZGF0 YScgZG8gYGZvbnQtbG9jay1jb21waWxlLWtleXdvcmRzJyBpZiBuZWNlc3NhcnkKLTs7IC0gWEVt YWNzOiBNYWRlIGBmb250LWxvY2stY29tcGlsZS1rZXl3b3JkcycgYGRlZmFsaWFzJwotOzsgMy4w Ni0tMy4wNzoKLTs7IC0gWEVtYWNzOiBBZGQgYGZhc3QtbG9jay1hZnRlci1mb250aWZ5LWJ1ZmZl cicgdG8gdGhlIEZvbnQgTG9jayBob29rCi07OyAtIE1hZGUgYGZhc3QtbG9jay1jYWNoZS1uYW1l JyBleHBsYWluIHRoZSB1c2Ugb2YgYGRpcmVjdG9yeS1hYmJyZXYtYWxpc3QnCi07OyAtIE1hZGUg YGZhc3QtbG9jay1tb2RlJyB1c2UgYGJ1ZmZlci1maWxlLXRydWVuYW1lJyBub3QgYGJ1ZmZlci1m aWxlLW5hbWUnCi07OyAzLjA3LS0zLjA4OgotOzsgLSBNYWRlIGBmYXN0LWxvY2stcmVhZC1jYWNo ZScgc2V0IGBmYXN0LWxvY2stY2FjaGUtZmlsZW5hbWUnCi07OyAzLjA4LS0zLjA5OgotOzsgLSBN YWRlIGBmYXN0LWxvY2stc2F2ZS1jYWNoZScgY29wZSBpZiBgZmFzdC1sb2NrLW1pbmltdW0tc2l6 ZScgaXMgYSBsaXN0Ci07OyAtIE1hZGUgYGZhc3QtbG9jay1tb2RlJyByZXNwZWN0IHRoZSB2YWx1 ZSBvZiBgZm9udC1sb2NrLWluaGliaXQtdGhpbmctbG9jaycKLTs7IC0gQWRkZWQgYGZhc3QtbG9j ay1hZnRlci11bmZvbnRpZnktYnVmZmVyJwotOzsgMy4wOS0tMy4xMDoKLTs7IC0gUmV3cml0ZSBm b3IgQ29tbW9uIExpc3AgbWFjcm9zCi07OyAtIE1hZGUgZmFzdC1sb2NrLmVsIGJhcmYgb24gYSBj cmFwIDgrMyBwc2V1ZG8tT1MgKEVsaSBaYXJldHNraWkgaGVscCkKLTs7IC0gWEVtYWNzOiBNYWRl IGBhZGQtbWlub3ItbW9kZScgc3VjY2VlZCBgYXV0b2xvYWQnIGNvb2tpZQotOzsgLSBYRW1hY3M6 IE1hZGUgYGZhc3QtbG9jay1zYXZlLWZhY2VzJyBkZWZhdWx0IHRvIGBmb250LWxvY2stZmFjZS1s aXN0JwotOzsgLSBNYWRlIGBmYXN0LWxvY2stc2F2ZS1jYWNoZScgdXNlIGBmb250LWxvY2stdmFs dWUtaW4tbWFqb3ItbW9kZScKLTs7IC0gV3JhcCB3aXRoIGBzYXZlLWJ1ZmZlci1zdGF0ZScgKFJh eSBWYW4gVGFzc2xlIHJlcG9ydCkKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLW1vZGUnIHdyYXAgYGZv bnQtbG9jay1zdXBwb3J0LW1vZGUnCi07OyAzLjEwLS0zLjExOgotOzsgLSBNYWRlIGBmYXN0LWxv Y2stZ2V0LWZhY2UtcHJvcGVydGllcycgY29wZSB3aXRoIGZhY2UgbGlzdHMKLTs7IC0gQWRkZWQg YGZhc3QtbG9jay12ZXJib3NlJwotOzsgLSBYRW1hY3M6IEFkZCBgZm9udC1sb2NrLXZhbHVlLWlu LW1ham9yLW1vZGUnIGlmIG5lY2Vzc2FyeQotOzsgLSBSZW1vdmVkIGBmYXN0LWxvY2stc3VibWl0 LWJ1Zy1yZXBvcnQnIGFuZCBiYWRlIGZhcmV3ZWxsCi07OyAzLjExLS0zLjEyOgotOzsgLSBBZGRl ZCBDdXN0b20gc3VwcG9ydCAoSHJ2b2plIE5pa8WhacSHIGhlbHApCi07OyAtIE1hZGUgYHNhdmUt YnVmZmVyLXN0YXRlJyB3cmFwIGBpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcycKLTs7IC0gTWFk ZSBgZmFzdC1sb2NrLWNhY2hlLWRhdGEnIHNpbXBsaWZ5IGNhbGxzIG9mIGBmb250LWxvY2stY29t cGlsZS1rZXl3b3JkcycKLTs7IDMuMTItLTMuMTM6Ci07OyAtIFJlbW92ZWQgYGJ5dGUtKicgdmFy aWFibGVzIGZyb20gYGV2YWwtd2hlbi1jb21waWxlJyAoRXJpayBOYWdndW0gaGludCkKLTs7IC0g Q2hhbmdlZCBzdHJ1Y3R1cmUgb2YgY2FjaGUgdG8gaW5jbHVkZSBgZm9udC1sb2NrLXN5bnRhY3Rp Yy1rZXl3b3JkcycKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLXNhdmUtY2FjaGUtMScgc2F2ZSBzeW50 YWN0aWMgZm9udGlmaWNhdGlvbiBkYXRhCi07OyAtIE1hZGUgYGZhc3QtbG9jay1jYWNoZS1kYXRh JyB0YWtlIHN5bnRhY3RpYyBmb250aWZpY2F0aW9uIGRhdGEKLTs7IC0gQWRkZWQgYGZhc3QtbG9j ay1nZXQtc3ludGFjdGljLXByb3BlcnRpZXMnCi07OyAtIFJlbmFtZWQgYGZhc3QtbG9jay1zZXQt ZmFjZS1wcm9wZXJ0aWVzJyB0byBgZmFzdC1sb2NrLWFkZC1wcm9wZXJ0aWVzJwotOzsgLSBNYWRl IGBmYXN0LWxvY2stYWRkLXByb3BlcnRpZXMnIGFkZCBzeW50YWN0aWMgYW5kIGZhY2UgZm9udGlm aWNhdGlvbiBkYXRhCi07OyAzLjEzLS0zLjE0OgotOzsgLSBNYWRlIGBmYXN0LWxvY2stY2FjaGUt bmFtZScgY29wZSB3aXRoIGB3aW5kb3dzbnQnIChHZW9mZiBWb2Vsa2VyIGZpeCkKLTs7IC0gTWFk ZSBgZmFzdC1sb2NrLXZlcmJvc2UnIHVzZSBgb3RoZXInIHdpZGdldCAoQW5kcmVhcyBTY2h3YWIg Zml4KQotOzsgLSBVc2VkIGB3aXRoLXRlbXAtbWVzc2FnZScgd2hlcmUgcG9zc2libGUgdG8gbWFr ZSBtZXNzYWdlcyB0ZW1wb3JhcnkuCi0MCi07OzsgQ29kZToKLQotKHJlcXVpcmUgJ2ZvbnQtbG9j aykKLQotKGRlY2xhcmUtZnVuY3Rpb24gbXNkb3MtbG9uZy1maWxlLW5hbWVzICJtc2Rvcy5jIikK LQotOzsgTWFrZSBzdXJlIGZhc3QtbG9jay5lbCBpcyBzdXBwb3J0ZWQuCi0oaWYgKGFuZCAoZXEg c3lzdGVtLXR5cGUgJ21zLWRvcykgKG5vdCAobXNkb3MtbG9uZy1maWxlLW5hbWVzKSkpCi0gICAg KGVycm9yICJgZmFzdC1sb2NrJyB3YXMgd3JpdHRlbiBmb3IgbG9uZyBmaWxlIG5hbWUgc3lzdGVt cyIpKQotCi0oZGVmdmFyIGZvbnQtbG9jay1mYWNlLWxpc3QpCi0KLShldmFsLXdoZW4tY29tcGls ZQotIDs7Ci0gOzsgV2UgdXNlIHRoaXMgdG8gdmVyaWZ5IHRoYXQgYSBmYWNlIHNob3VsZCBiZSBz YXZlZC4KLSAoZGVmbWFjcm8gZmFzdC1sb2NrLXNhdmUtZmFjZXAgKGZhY2UpCi0gICAiUmV0dXJu IG5vbi1uaWwgaWYgRkFDRSBpcyBvbmUgb2YgYGZhc3QtbG9jay1zYXZlLWZhY2VzJy4iCi0gICBg KG9yIChudWxsIGZhc3QtbG9jay1zYXZlLWZhY2VzKQotICAgICAoaWYgKHN5bWJvbHAgLGZhY2Up Ci0gICAgICAgICAobWVtcSAsZmFjZSBmYXN0LWxvY2stc2F2ZS1mYWNlcykKLSAgICAgICAgIChs ZXQgKChmYWNlcyAsZmFjZSkpCi0gICAgICAgICAgICh3aGlsZSAodW5sZXNzIChtZW1xIChjYXIg ZmFjZXMpIGZhc3QtbG9jay1zYXZlLWZhY2VzKQotICAgICAgICAgICAgICAgICAgICAoc2V0cSBm YWNlcyAoY2RyIGZhY2VzKSkpKQotICAgICAgICAgICBmYWNlcykpKSkpCi0KLShkZWZncm91cCBm YXN0LWxvY2sgbmlsCi0gICJGb250IExvY2sgc3VwcG9ydCBtb2RlIHRvIGNhY2hlIGZvbnRpZmlj YXRpb24uIgotICA6bG9hZCAnZmFzdC1sb2NrCi0gIDpncm91cCAnZm9udC1sb2NrKQotCi0oZGVm dmFyIGZhc3QtbG9jay1tb2RlIG5pbCkJCTsgV2hldGhlciB3ZSBhcmUgdHVybmVkIG9uLgotKGRl ZnZhciBmYXN0LWxvY2stY2FjaGUtdGltZXN0YW1wIG5pbCkJOyBGb3Igc2F2aW5nL3JlYWRpbmcu Ci0oZGVmdmFyIGZhc3QtbG9jay1jYWNoZS1maWxlbmFtZSBuaWwpCTsgRm9yIGRlbGV0aW5nLgot DAotOzsgVXNlciBWYXJpYWJsZXM6Ci0KLShkZWZjdXN0b20gZmFzdC1sb2NrLW1pbmltdW0tc2l6 ZSAyNTYwMAotICAiTWluaW11bSBzaXplIG9mIGEgYnVmZmVyIGZvciBjYWNoZWQgZm9udGlmaWNh dGlvbi4KLU9ubHkgYnVmZmVycyBtb3JlIHRoYW4gdGhpcyBjYW4gaGF2ZSBhc3NvY2lhdGVkIEZv bnQgTG9jayBjYWNoZSBmaWxlcyBzYXZlZC4KLUlmIG5pbCwgbWVhbnMgY2FjaGUgZmlsZXMgYXJl IG5ldmVyIGNyZWF0ZWQuCi1JZiBhIGxpc3QsIGVhY2ggZWxlbWVudCBzaG91bGQgYmUgYSBjb25z IHBhaXIgb2YgdGhlIGZvcm0gKE1BSk9SLU1PREUgLiBTSVpFKSwKLXdoZXJlIE1BSk9SLU1PREUg aXMgYSBzeW1ib2wgb3IgdCAobWVhbmluZyB0aGUgZGVmYXVsdCkuICBGb3IgZXhhbXBsZToKLSAo KGMtbW9kZSAuIDI1NjAwKSAoYysrLW1vZGUgLiAyNTYwMCkgKHJtYWlsLW1vZGUgLiAxMDQ4NTc2 KSkKLW1lYW5zIHRoYXQgdGhlIG1pbmltdW0gc2l6ZSBpcyAyNUsgZm9yIGJ1ZmZlcnMgaW4gQyBv ciBDKysgbW9kZXMsIG9uZSBtZWdhYnl0ZQotZm9yIGJ1ZmZlcnMgaW4gUm1haWwgbW9kZSwgYW5k IHNpemUgaXMgaXJyZWxldmFudCBvdGhlcndpc2UuIgotICA6dHlwZSAnKGNob2ljZSAoY29uc3Qg OnRhZyAibm9uZSIgbmlsKQotCQkgKGludGVnZXIgOnRhZyAic2l6ZSIpCi0JCSAocmVwZWF0IDpt ZW51LXRhZyAibW9kZSBzcGVjaWZpYyIgOnRhZyAibW9kZSBzcGVjaWZpYyIKLQkJCSA6dmFsdWUg KCh0IC4gbmlsKSkKLQkJCSAoY29ucyA6dGFnICJJbnN0YW5jZSIKLQkJCSAgICAgICAocmFkaW8g OnRhZyAiTW9kZSIKLQkJCQkgICAgICAoY29uc3QgOnRhZyAiYWxsIiB0KQotCQkJCSAgICAgIChz eW1ib2wgOnRhZyAibmFtZSIpKQotCQkJICAgICAgIChyYWRpbyA6dGFnICJTaXplIgotCQkJCSAg ICAgIChjb25zdCA6dGFnICJub25lIiBuaWwpCi0JCQkJICAgICAgKGludGVnZXIgOnRhZyAic2l6 ZSIpKSkpKSkKLQotKGRlZmN1c3RvbSBmYXN0LWxvY2stY2FjaGUtZGlyZWN0b3JpZXMgJygifi8u ZW1hY3MtZmxjIikKLTsgLSBgaW50ZXJuYWwnLCBrZWVwIGVhY2ggZmlsZSdzIEZvbnQgTG9jayBj YWNoZSBmaWxlIGluIHRoZSBzYW1lIGZpbGUuCi07IC0gYGV4dGVybmFsJywga2VlcCBlYWNoIGZp bGUncyBGb250IExvY2sgY2FjaGUgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCi0gICJEaXJl Y3RvcmllcyBpbiB3aGljaCBGb250IExvY2sgY2FjaGUgZmlsZXMgYXJlIHNhdmVkIGFuZCByZWFk LgotRWFjaCBpdGVtIHNob3VsZCBiZSBlaXRoZXIgRElSIG9yIGEgY29ucyBwYWlyIG9mIHRoZSBm b3JtIChSRUdFWFAgLiBESVIpIHdoZXJlCi1ESVIgaXMgYSBkaXJlY3RvcnkgbmFtZSAocmVsYXRp dmUgb3IgYWJzb2x1dGUpIGFuZCBSRUdFWFAgaXMgYSByZWdleHAuCi0KLUFuIGF0dGVtcHQgd2ls bCBiZSBtYWRlIHRvIHNhdmUgb3IgcmVhZCBGb250IExvY2sgY2FjaGUgZmlsZXMgdXNpbmcgdGhl c2UgaXRlbXMKLXVudGlsIG9uZSBzdWNjZWVkcyAoaS5lLiwgdW50aWwgYSByZWFkYWJsZSBvciB3 cml0YWJsZSBvbmUgaXMgZm91bmQpLiAgSWYgYW4KLWl0ZW0gY29udGFpbnMgUkVHRVhQLCBESVIg aXMgdXNlZCBvbmx5IGlmIHRoZSBidWZmZXIgZmlsZSBuYW1lIG1hdGNoZXMgUkVHRVhQLgotRm9y IGV4YW1wbGU6Ci0KLSAobGV0ICgoaG9tZSAoZXhwYW5kLWZpbGUtbmFtZSAoYWJicmV2aWF0ZS1m aWxlLW5hbWUgKGZpbGUtdHJ1ZW5hbWUgXCJ+L1wiKSkpKSkKLSAgIChsaXN0IChjb25zIChjb25j YXQgXCJeXCIgKHJlZ2V4cC1xdW90ZSBob21lKSkgXCIuXCIpIFwifi8uZW1hY3MtZmxjXCIpKQot ICAgID0+Ci0gKChcIl4veW91ci90cnVlL2hvbWUvZGlyZWN0b3J5L1wiIC4gXCIuXCIpIFwifi8u ZW1hY3MtZmxjXCIpCi0KLXdvdWxkIGNhdXNlIGEgZmlsZSdzIGN1cnJlbnQgZGlyZWN0b3J5IHRv IGJlIHVzZWQgaWYgdGhlIGZpbGUgaXMgdW5kZXIgeW91cgotaG9tZSBkaXJlY3RvcnkgaGllcmFy Y2h5LCBvciBvdGhlcndpc2UgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBgfi8uZW1hY3MtZmxjJy4K LUZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBub3QgYWR2aXNhYmxlIHRvIHVzZSB0aGUgZmls ZSdzIGN1cnJlbnQgZGlyZWN0b3J5Ci10byBhdm9pZCB0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcg dGhlIGNhY2hlIG9mIGFub3RoZXIgdXNlci4iCi0gIDp0eXBlICcocmVwZWF0IChyYWRpbyAoZGly ZWN0b3J5IDp0YWcgImRpcmVjdG9yeSIpCi0JCQkoY29ucyA6dGFnICJNYXRjaGluZyIKLQkJCSAg ICAgIChyZWdleHAgOnRhZyAicmVnZXhwIikKLQkJCSAgICAgIChkaXJlY3RvcnkgOnRhZyAiZGly ZWN0b3J5IikpKSkpCi0ocHV0ICdmYXN0LWxvY2stY2FjaGUtZGlyZWN0b3JpZXMgJ3Jpc2t5LWxv Y2FsLXZhcmlhYmxlIHQpCi0KLShkZWZjdXN0b20gZmFzdC1sb2NrLXNhdmUtZXZlbnRzICcoa2ls bC1idWZmZXIga2lsbC1lbWFjcykKLSAgIkV2ZW50cyB1bmRlciB3aGljaCBjYWNoZXMgd2lsbCBi ZSBzYXZlZC4KLVZhbGlkIGV2ZW50cyBhcmUgYHNhdmUtYnVmZmVyJywgYGtpbGwtYnVmZmVyJyBh bmQgYGtpbGwtZW1hY3MnLgotSWYgY29uY3VycmVudCBlZGl0aW5nIHNlc3Npb25zIHVzZSB0aGUg c2FtZSBhc3NvY2lhdGVkIGNhY2hlIGZpbGUgZm9yIGEgZmlsZSdzCi1idWZmZXIsIHRoZW4geW91 IHNob3VsZCBhZGQgYHNhdmUtYnVmZmVyJyB0byB0aGlzIGxpc3QuIgotICA6dHlwZSAnKHNldCAo Y29uc3QgOnRhZyAiYnVmZmVyIHNhdmluZyIgc2F2ZS1idWZmZXIpCi0JICAgICAgKGNvbnN0IDp0 YWcgImJ1ZmZlciBraWxsaW5nIiBraWxsLWJ1ZmZlcikKLQkgICAgICAoY29uc3QgOnRhZyAiZW1h Y3Mga2lsbGluZyIga2lsbC1lbWFjcykpKQotCi0oZGVmY3VzdG9tIGZhc3QtbG9jay1zYXZlLW90 aGVycyB0Ci0gICJJZiBub24tbmlsLCBzYXZlIEZvbnQgTG9jayBjYWNoZSBmaWxlcyBpcnJlc3Bl Y3RpdmUgb2YgZmlsZSBvd25lci4KLUlmIG5pbCwgbWVhbnMgb25seSBidWZmZXIgZmlsZXMga25v d24gdG8gYmUgb3duZWQgYnkgeW91IGNhbiBoYXZlIGFzc29jaWF0ZWQKLUZvbnQgTG9jayBjYWNo ZSBmaWxlcyBzYXZlZC4gIE93bmVyc2hpcCBtYXkgYmUgdW5rbm93biBmb3IgbmV0d29ya2VkIGZp bGVzLiIKLSAgOnR5cGUgJ2Jvb2xlYW4pCi0KLShkZWZjdXN0b20gZmFzdC1sb2NrLXZlcmJvc2Ug Zm9udC1sb2NrLXZlcmJvc2UKLSAgIklmIG5vbi1uaWwsIG1lYW5zIHNob3cgc3RhdHVzIG1lc3Nh Z2VzIGZvciBjYWNoZSBwcm9jZXNzaW5nLgotSWYgYSBudW1iZXIsIG9ubHkgYnVmZmVycyBncmVh dGVyIHRoYW4gdGhpcyBzaXplIGhhdmUgcHJvY2Vzc2luZyBtZXNzYWdlcy4iCi0gIDp0eXBlICco Y2hvaWNlIChjb25zdCA6dGFnICJuZXZlciIgbmlsKQotCQkgKG90aGVyIDp0YWcgImFsd2F5cyIg dCkKLQkJIChpbnRlZ2VyIDp0YWcgInNpemUiKSkpCi0KLShkZWZ2YXIgZmFzdC1sb2NrLXNhdmUt ZmFjZXMgbmlsCi0gICJGYWNlcyB0aGF0IHdpbGwgYmUgc2F2ZWQgaW4gYSBGb250IExvY2sgY2Fj aGUgZmlsZS4KLUlmIG5pbCwgbWVhbnMgaW5mb3JtYXRpb24gZm9yIGFsbCBmYWNlcyB3aWxsIGJl IHNhdmVkLiIpCi0MCi07OyBVc2VyIEZ1bmN0aW9uczoKLQotOzs7IyMjYXV0b2xvYWQKLShkZWZ1 biBmYXN0LWxvY2stbW9kZSAoJm9wdGlvbmFsIGFyZykKLSAgIlRvZ2dsZSBGYXN0IExvY2sgbW9k ZS4KLVdpdGggYXJnLCB0dXJuIEZhc3QgTG9jayBtb2RlIG9uIGlmIGFuZCBvbmx5IGlmIGFyZyBp cyBwb3NpdGl2ZSBhbmQgdGhlIGJ1ZmZlcgotaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZS4gIEVu YWJsZSBpdCBhdXRvbWF0aWNhbGx5IGluIHlvdXIgYH4vLmVtYWNzJyBieToKLQotIChzZXRxIGZv bnQtbG9jay1zdXBwb3J0LW1vZGUgXFw9J2Zhc3QtbG9jay1tb2RlKQotCi1JZiBGYXN0IExvY2sg bW9kZSBpcyBlbmFibGVkLCBhbmQgdGhlIGN1cnJlbnQgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4g YW55IHRleHQKLXByb3BlcnRpZXMsIGFueSBhc3NvY2lhdGVkIEZvbnQgTG9jayBjYWNoZSBpcyB1 c2VkIGlmIGl0cyB0aW1lc3RhbXAgbWF0Y2hlcyB0aGUKLWJ1ZmZlcidzIGZpbGUsIGFuZCBpdHMg YGZvbnQtbG9jay1rZXl3b3JkcycgbWF0Y2ggdGhvc2UgdGhhdCB5b3UgYXJlIHVzaW5nLgotCi1G b250IExvY2sgY2FjaGVzIG1heSBiZSBzYXZlZDoKLS0gV2hlbiB5b3Ugc2F2ZSB0aGUgZmlsZSdz IGJ1ZmZlci4KLS0gV2hlbiB5b3Uga2lsbCBhbiB1bm1vZGlmaWVkIGZpbGUncyBidWZmZXIuCi0t IFdoZW4geW91IGV4aXQgRW1hY3MsIGZvciBhbGwgdW5tb2RpZmllZCBvciBzYXZlZCBidWZmZXJz LgotRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBgZmFzdC1sb2NrLXNhdmUtZXZlbnRzJy4KLVNl ZSBhbHNvIHRoZSBjb21tYW5kcyBgZmFzdC1sb2NrLXJlYWQtY2FjaGUnIGFuZCBgZmFzdC1sb2Nr LXNhdmUtY2FjaGUnLgotCi1Vc2UgXFxbZm9udC1sb2NrLWZvbnRpZnktYnVmZmVyXSB0byBmb250 aWZ5IHRoZSBidWZmZXIgaWYgdGhlIGNhY2hlIGlzIGJhZC4KLQotVmFyaW91cyBtZXRob2RzIG9m IGNvbnRyb2wgYXJlIHByb3ZpZGVkIGZvciB0aGUgRm9udCBMb2NrIGNhY2hlLiAgSW4gZ2VuZXJh bCwKLXNlZSB2YXJpYWJsZSBgZmFzdC1sb2NrLWNhY2hlLWRpcmVjdG9yaWVzJyBhbmQgZnVuY3Rp b24gYGZhc3QtbG9jay1jYWNoZS1uYW1lJy4KLUZvciBzYXZpbmcsIHNlZSB2YXJpYWJsZXMgYGZh c3QtbG9jay1taW5pbXVtLXNpemUnLCBgZmFzdC1sb2NrLXNhdmUtZXZlbnRzJywKLWBmYXN0LWxv Y2stc2F2ZS1vdGhlcnMnIGFuZCBgZmFzdC1sb2NrLXNhdmUtZmFjZXMnLiIKLSAgKGludGVyYWN0 aXZlICJQIikKLSAgOzsgT25seSB0dXJuIG9uIGlmIHdlIGFyZSB2aXNpdGluZyBhIGZpbGUuICBX ZSBjb3VsZCB1c2UgYGJ1ZmZlci1maWxlLW5hbWUnLAotICA7OyBidXQgbWFueSBwYWNrYWdlcyB0 ZW1wb3JhcmlseSB3cmFwIHRoYXQgdG8gbmlsIHdoZW4gZG9pbmcgdGhlaXIgb3duIHRoaW5nLgot ICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmYXN0LWxvY2stbW9kZSkKLSAgICAgICAoYW5k IGJ1ZmZlci1maWxlLXRydWVuYW1lCi0JICAgIChub3QgKG1lbXEgJ2Zhc3QtbG9jay1tb2RlIGZv bnQtbG9jay1pbmhpYml0LXRoaW5nLWxvY2spKQotCSAgICAoaWYgYXJnICg+IChwcmVmaXgtbnVt ZXJpYy12YWx1ZSBhcmcpIDApIChub3QgZmFzdC1sb2NrLW1vZGUpKSkpCi0gIChpZiAoYW5kIGZh c3QtbG9jay1tb2RlIChub3QgZm9udC1sb2NrLW1vZGUpKQotICAgICAgOzsgVHVybmVkIG9uIGBm YXN0LWxvY2stbW9kZScgcmF0aGVyIHRoYW4gYGZvbnQtbG9jay1tb2RlJy4KLSAgICAgIChwcm9n bgotICAgICAgICAobWVzc2FnZSAiVXNlIGZvbnQtbG9jay1zdXBwb3J0LW1vZGUgcmF0aGVyIHRo YW4gY2FsbGluZyBmYXN0LWxvY2stbW9kZSIpCi0gICAgICAgIChzaXQtZm9yIDIpKQotICAgIDs7 IExldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLgotICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFi bGUgJ2Zhc3QtbG9jay1jYWNoZS10aW1lc3RhbXApIG5pbCkKLSAgICAoc2V0IChtYWtlLWxvY2Fs LXZhcmlhYmxlICdmYXN0LWxvY2stY2FjaGUtZmlsZW5hbWUpIG5pbCkKLSAgICAod2hlbiAoYW5k IGZhc3QtbG9jay1tb2RlIChub3QgZm9udC1sb2NrLWZvbnRpZmllZCkpCi0gICAgICAoZmFzdC1s b2NrLXJlYWQtY2FjaGUpKSkpCi0KLShkZWZ1biBmYXN0LWxvY2stcmVhZC1jYWNoZSAoKQotICAi UmVhZCB0aGUgRm9udCBMb2NrIGNhY2hlIGZvciB0aGUgY3VycmVudCBidWZmZXIuCi0KLVRoZSBm b2xsb3dpbmcgY3JpdGVyaWEgbXVzdCBiZSBtZXQgZm9yIGEgRm9udCBMb2NrIGNhY2hlIGZpbGUg dG8gYmUgcmVhZDoKLS0gRmFzdCBMb2NrIG1vZGUgbXVzdCBiZSB0dXJuZWQgb24gaW4gdGhlIGJ1 ZmZlci4KLS0gVGhlIGJ1ZmZlciBtdXN0IG5vdCBiZSBtb2RpZmllZC4KLS0gVGhlIGJ1ZmZlcidz IGBmb250LWxvY2sta2V5d29yZHMnIG11c3QgbWF0Y2ggdGhlIGNhY2hlJ3MuCi0tIFRoZSBidWZm ZXIgZmlsZSdzIHRpbWVzdGFtcCBtdXN0IG1hdGNoIHRoZSBjYWNoZSdzLgotLSBDcml0ZXJpYSBp bXBvc2VkIGJ5IGBmYXN0LWxvY2stY2FjaGUtZGlyZWN0b3JpZXMnLgotCi1TZWUgYGZhc3QtbG9j ay1tb2RlJy4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoKGRpcmVjdG9yaWVzIGZhc3QtbG9j ay1jYWNoZS1kaXJlY3RvcmllcykKLQkobW9kaWZpZWQgKGJ1ZmZlci1tb2RpZmllZC1wKSkgKGlu aGliaXQtcmVhZC1vbmx5IHQpCi0JKGZvbnRpZmllZCBmb250LWxvY2stZm9udGlmaWVkKSkKLSAg ICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmb250LWxvY2stZm9udGlmaWVkKSBuaWwpCi0g ICAgOzsgS2VlcCB0cnlpbmcgZGlyZWN0b3JpZXMgdW50aWwgZm9udGlmaWNhdGlvbiBpcyB0dXJu ZWQgb2ZmLgotICAgICh3aGlsZSAoYW5kIGRpcmVjdG9yaWVzIChub3QgZm9udC1sb2NrLWZvbnRp ZmllZCkpCi0gICAgICAobGV0ICgoZGlyZWN0b3J5IChmYXN0LWxvY2stY2FjaGUtZGlyZWN0b3J5 IChjYXIgZGlyZWN0b3JpZXMpIG5pbCkpKQotCShjb25kaXRpb24tY2FzZSBuaWwKLQkgICAgKHdo ZW4gZGlyZWN0b3J5Ci0JICAgICAgKHNldHEgZmFzdC1sb2NrLWNhY2hlLWZpbGVuYW1lIChmYXN0 LWxvY2stY2FjaGUtbmFtZSBkaXJlY3RvcnkpKQotCSAgICAgICh3aGVuIChmaWxlLXJlYWRhYmxl LXAgZmFzdC1sb2NrLWNhY2hlLWZpbGVuYW1lKQotCQkobG9hZCBmYXN0LWxvY2stY2FjaGUtZmls ZW5hbWUgdCB0IHQpKSkKLQkgIChlcnJvciBuaWwpIChxdWl0IG5pbCkpCi0JKHNldHEgZGlyZWN0 b3JpZXMgKGNkciBkaXJlY3RvcmllcykpKSkKLSAgICA7OyBVbnNldCBgZmFzdC1sb2NrLWNhY2hl LWZpbGVuYW1lJywgYW5kIHJlc3RvcmUgYGZvbnQtbG9jay1mb250aWZpZWQnLCBpZgotICAgIDs7 IHdlIGRvbid0IHVzZSBhIGNhY2hlLiAgKE5vdGUgdGhhdCBgZmFzdC1sb2NrLWNhY2hlLWRhdGEn IHNldHMgdGhlIHZhbHVlCi0gICAgOzsgb2YgYGZhc3QtbG9jay1jYWNoZS10aW1lc3RhbXAnLikK LSAgICAoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG1vZGlmaWVkKQotICAgICh1bmxlc3MgZm9udC1s b2NrLWZvbnRpZmllZAotICAgICAgKHNldHEgZmFzdC1sb2NrLWNhY2hlLWZpbGVuYW1lIG5pbCBm b250LWxvY2stZm9udGlmaWVkIGZvbnRpZmllZCkpKSkKLQotKGRlZnVuIGZhc3QtbG9jay1zYXZl LWNhY2hlICgmb3B0aW9uYWwgYnVmZmVyKQotICAiU2F2ZSB0aGUgRm9udCBMb2NrIGNhY2hlIG9m IEJVRkZFUiBvciB0aGUgY3VycmVudCBidWZmZXIuCi0KLVRoZSBmb2xsb3dpbmcgY3JpdGVyaWEg bXVzdCBiZSBtZXQgZm9yIGEgRm9udCBMb2NrIGNhY2hlIGZpbGUgdG8gYmUgc2F2ZWQ6Ci0tIEZh c3QgTG9jayBtb2RlIG11c3QgYmUgdHVybmVkIG9uIGluIHRoZSBidWZmZXIuCi0tIFRoZSBldmVu dCBtdXN0IGJlIG9uZSBvZiBgZmFzdC1sb2NrLXNhdmUtZXZlbnRzJy4KLS0gVGhlIGJ1ZmZlciBt dXN0IGJlIGF0IGxlYXN0IGBmYXN0LWxvY2stbWluaW11bS1zaXplJyBieXRlcyBsb25nLgotLSBU aGUgYnVmZmVyIGZpbGUgbXVzdCBiZSBvd25lZCBieSB5b3UsIG9yIGBmYXN0LWxvY2stc2F2ZS1v dGhlcnMnIG11c3QgYmUgdC4KLS0gVGhlIGJ1ZmZlciBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25l IGBmYWNlJyB0ZXh0IHByb3BlcnR5LgotLSBUaGUgYnVmZmVyIG11c3Qgbm90IGJlIG1vZGlmaWVk LgotLSBUaGUgYnVmZmVyIGZpbGUncyB0aW1lc3RhbXAgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUg ZmlsZSdzIG9uIGRpc2suCi0tIFRoZSBvbiBkaXNrIGZpbGUncyB0aW1lc3RhbXAgbXVzdCBiZSBk aWZmZXJlbnQgdGhhbiB0aGUgYnVmZmVyJ3MgY2FjaGUuCi0tIENyaXRlcmlhIGltcG9zZWQgYnkg YGZhc3QtbG9jay1jYWNoZS1kaXJlY3RvcmllcycuCi0KLVNlZSBgZmFzdC1sb2NrLW1vZGUnLiIK LSAgKGludGVyYWN0aXZlKQotICAoc2F2ZS1leGN1cnNpb24KLSAgICAod2hlbiBidWZmZXIKLSAg ICAgIChzZXQtYnVmZmVyIGJ1ZmZlcikpCi0gICAgKGxldCAoKG1pbi1zaXplIChmb250LWxvY2st dmFsdWUtaW4tbWFqb3ItbW9kZSBmYXN0LWxvY2stbWluaW11bS1zaXplKSkKLQkgIChmaWxlLXRp bWVzdGFtcCAodmlzaXRlZC1maWxlLW1vZHRpbWUpKSAoc2F2ZWQgbmlsKSkKLSAgICAgICh3aGVu IChhbmQgZmFzdC1sb2NrLW1vZGUKLQkgICAgIDs7Ci0JICAgICA7OyAiT25seSBzYXZlIGlmIHRo ZSBidWZmZXIgbWF0Y2hlcyB0aGUgZmlsZSwgdGhlIGZpbGUgaGFzCi0JICAgICA7OyBjaGFuZ2Vk LCBhbmQgaXQgd2FzIGNoYW5nZWQgYnkgdGhlIGN1cnJlbnQgZW1hY3Mgc2Vzc2lvbi4iCi0JICAg ICA7OwotCSAgICAgOzsgT25seSBzYXZlIGlmIHRoZSBidWZmZXIgaXMgbm90IG1vZGlmaWVkLAot CSAgICAgOzsgKGkuZS4sIHNvIHdlIGRvbid0IHNhdmUgZm9yIHNvbWV0aGluZyBub3Qgb24gZGlz aykKLQkgICAgIChub3QgKGJ1ZmZlci1tb2RpZmllZC1wKSkKLQkgICAgIDs7IGFuZCB0aGUgZmls ZSdzIHRpbWVzdGFtcCBpcyB0aGUgc2FtZSBhcyB0aGUgYnVmZmVyJ3MsCi0JICAgICA7OyAoaS5l Liwgc29tZW9uZSBlbHNlIGhhc24ndCB3cml0dGVuIHRoZSBmaWxlIGluIHRoZSBtZWFudGltZSkK LQkgICAgICh2ZXJpZnktdmlzaXRlZC1maWxlLW1vZHRpbWUgKGN1cnJlbnQtYnVmZmVyKSkKLQkg ICAgIDs7IGFuZCB0aGUgZmlsZSdzIHRpbWVzdGFtcCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY2Fj aGUncy4KLQkgICAgIDs7IChpLmUuLCBhIHNhdmUgaGFzIG9jY3VycmVkIHNpbmNlIHRoZSBjYWNo ZSB3YXMgcmVhZCkKLQkgICAgIChub3QgKGVxdWFsIGZhc3QtbG9jay1jYWNoZS10aW1lc3RhbXAg ZmlsZS10aW1lc3RhbXApKQotCSAgICAgOzsKLQkgICAgIDs7IE9ubHkgc2F2ZSBpZiB1c2VyJ3Mg cmVzdHJpY3Rpb25zIGFyZSBzYXRpc2ZpZWQuCi0JICAgICAoYW5kIG1pbi1zaXplICg+PSAoYnVm ZmVyLXNpemUpIG1pbi1zaXplKSkKLQkgICAgIChvciBmYXN0LWxvY2stc2F2ZS1vdGhlcnMKLQkJ IChlcSAodXNlci11aWQpIChmaWxlLWF0dHJpYnV0ZS11c2VyLWlkCi0JCQkJIChmaWxlLWF0dHJp YnV0ZXMgYnVmZmVyLWZpbGUtbmFtZSkpKSkKLQkgICAgIDs7Ci0JICAgICA7OyBPbmx5IHNhdmUg aWYgdGhlcmUgYXJlIGBmYWNlJyBwcm9wZXJ0aWVzIHRvIHNhdmUuCi0JICAgICAodGV4dC1wcm9w ZXJ0eS1ub3QtYWxsIChwb2ludC1taW4pIChwb2ludC1tYXgpICdmYWNlIG5pbCkpCi0JOzsKLQk7 OyBUcnkgZWFjaCBkaXJlY3RvcnkgdW50aWwgd2UgbWFuYWdlIHRvIHNhdmUgb3IgdGhlIHVzZXIg cXVpdHMuCi0JKGxldCAoKGRpcmVjdG9yaWVzIGZhc3QtbG9jay1jYWNoZS1kaXJlY3Rvcmllcykp Ci0JICAod2hpbGUgKGFuZCBkaXJlY3RvcmllcyAobWVtcSBzYXZlZCAnKG5pbCBlcnJvcikpKQot CSAgICAobGV0KiAoKGRpciAoZmFzdC1sb2NrLWNhY2hlLWRpcmVjdG9yeSAoY2FyIGRpcmVjdG9y aWVzKSB0KSkKLQkJICAgKGZpbGUgKGFuZCBkaXIgKGZhc3QtbG9jay1jYWNoZS1uYW1lIGRpcikp KSkKLQkgICAgICAod2hlbiAoYW5kIGZpbGUgKGZpbGUtd3JpdGFibGUtcCBmaWxlKSkKLQkJKHNl dHEgc2F2ZWQgKGZhc3QtbG9jay1zYXZlLWNhY2hlLTEgZmlsZSBmaWxlLXRpbWVzdGFtcCkpKQot CSAgICAgIChzZXRxIGRpcmVjdG9yaWVzIChjZHIgZGlyZWN0b3JpZXMpKSkpKSkpKSkKLQotOzs7 IyMjYXV0b2xvYWQKLShkZWZ1biB0dXJuLW9uLWZhc3QtbG9jayAoKQotICAiVW5jb25kaXRpb25h bGx5IHR1cm4gb24gRmFzdCBMb2NrIG1vZGUuIgotICAoZmFzdC1sb2NrLW1vZGUgdCkpCi0MCi07 OzsgQVBJIEZ1bmN0aW9uczoKLQotKGRlZnVuIGZhc3QtbG9jay1hZnRlci1mb250aWZ5LWJ1ZmZl ciAoKQotICA7OyBEZWxldGUgdGhlIEZvbnQgTG9jayBjYWNoZSBmaWxlIHVzZWQgdG8gcmVzdG9y ZSBmb250aWZpY2F0aW9uLCBpZiBhbnkuCi0gICh3aGVuIGZhc3QtbG9jay1jYWNoZS1maWxlbmFt ZQotICAgIChpZiAoZmlsZS13cml0YWJsZS1wIGZhc3QtbG9jay1jYWNoZS1maWxlbmFtZSkKLQko ZGVsZXRlLWZpbGUgZmFzdC1sb2NrLWNhY2hlLWZpbGVuYW1lKQotICAgICAgKG1lc3NhZ2UgIkZp bGUgJXMgZm9udCBsb2NrIGNhY2hlIGNhbm5vdCBiZSBkZWxldGVkIiAoYnVmZmVyLW5hbWUpKSkp Ci0gIDs7IEZsYWcgc28gdGhhdCBhIGNhY2hlIHdpbGwgYmUgc2F2ZWQgbGF0ZXIgZXZlbiBpZiB0 aGUgZmlsZSBpcyBuZXZlciBzYXZlZC4KLSAgKHNldHEgZmFzdC1sb2NrLWNhY2hlLXRpbWVzdGFt cCBuaWwpKQotCi0oZGVmYWxpYXMgJ2Zhc3QtbG9jay1hZnRlci11bmZvbnRpZnktYnVmZmVyICMn aWdub3JlKQotDAotOzsgTWlzY2VsbGFuZW91cyBGdW5jdGlvbnM6Ci0KLShkZWZ1biBmYXN0LWxv Y2stc2F2ZS1jYWNoZS1hZnRlci1zYXZlLWZpbGUgKCkKLSAgOzsgRG8gYGZhc3QtbG9jay1zYXZl LWNhY2hlJyBpZiBgc2F2ZS1idWZmZXInIGlzIG9uIGBmYXN0LWxvY2stc2F2ZS1ldmVudHMnLgot ICAod2hlbiAobWVtcSAnc2F2ZS1idWZmZXIgZmFzdC1sb2NrLXNhdmUtZXZlbnRzKQotICAgIChm YXN0LWxvY2stc2F2ZS1jYWNoZSkpKQotCi0oZGVmdW4gZmFzdC1sb2NrLXNhdmUtY2FjaGUtYmVm b3JlLWtpbGwtYnVmZmVyICgpCi0gIDs7IERvIGBmYXN0LWxvY2stc2F2ZS1jYWNoZScgaWYgYGtp bGwtYnVmZmVyJyBpcyBvbiBgZmFzdC1sb2NrLXNhdmUtZXZlbnRzJy4KLSAgKHdoZW4gKG1lbXEg J2tpbGwtYnVmZmVyIGZhc3QtbG9jay1zYXZlLWV2ZW50cykKLSAgICAoZmFzdC1sb2NrLXNhdmUt Y2FjaGUpKSkKLQotKGRlZnVuIGZhc3QtbG9jay1zYXZlLWNhY2hlcy1iZWZvcmUta2lsbC1lbWFj cyAoKQotICA7OyBEbyBgZmFzdC1sb2NrLXNhdmUtY2FjaGUncyBpZiBga2lsbC1lbWFjcycgaXMg b24gYGZhc3QtbG9jay1zYXZlLWV2ZW50cycuCi0gICh3aGVuIChtZW1xICdraWxsLWVtYWNzIGZh c3QtbG9jay1zYXZlLWV2ZW50cykKLSAgICAobWFwY2FyICMnZmFzdC1sb2NrLXNhdmUtY2FjaGUg KGJ1ZmZlci1saXN0KSkpKQotCi0oZGVmdW4gZmFzdC1sb2NrLWNhY2hlLWRpcmVjdG9yeSAoZGly ZWN0b3J5IGNyZWF0ZSkKLSAgIlJldHVybiB1c2FibGUgZGlyZWN0b3J5IGJhc2VkIG9uIERJUkVD VE9SWS4KLVJldHVybnMgbmlsIGlmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsIG9yLCBp ZiBDUkVBVEUgbm9uLW5pbCwgY2Fubm90IGJlCi1jcmVhdGVkLiAgRElSRUNUT1JZIG1heSBiZSBh IHN0cmluZyBvciBhIGNvbnMgcGFpciBvZiB0aGUgZm9ybSAoUkVHRVhQIC4gRElSKS4KLVNlZSBg ZmFzdC1sb2NrLWNhY2hlLWRpcmVjdG9yaWVzJy4iCi0gIChsZXQgKChkaXIKLQkgKGNvbmQgKChu b3QgYnVmZmVyLWZpbGUtbmFtZSkKLQkJOzsgU2hvdWxkIG5ldmVyIGJlIG5pbCwgYnV0IGBjcnlw dCsrJyBzY3Jld3MgaXQgdXAuCi0JCW5pbCkKLQkgICAgICAgKChzdHJpbmdwIGRpcmVjdG9yeSkK LQkJOzsgSnVzdCBhIGRpcmVjdG9yeS4KLQkJZGlyZWN0b3J5KQotCSAgICAgICAodAotCQk7OyBB IGRpcmVjdG9yeSBpZiB0aGUgZmlsZSBuYW1lIG1hdGNoZXMgdGhlIHJlZ2V4cC4KLQkJKGxldCAo KGJ1ZmlsZSAoZXhwYW5kLWZpbGUtbmFtZSBidWZmZXItZmlsZS10cnVlbmFtZSkpCi0JCSAgICAg IChjYXNlLWZvbGQtc2VhcmNoIG5pbCkpCi0JCSAgKHdoZW4gKHNhdmUtbWF0Y2gtZGF0YSAoc3Ry aW5nLW1hdGNoIChjYXIgZGlyZWN0b3J5KSBidWZpbGUpKQotCQkgICAgKGNkciBkaXJlY3Rvcnkp KSkpKSkpCi0gICAgKGNvbmQgKChub3QgZGlyKQotCSAgIG5pbCkKLQkgICgoZmlsZS1hY2Nlc3Np YmxlLWRpcmVjdG9yeS1wIGRpcikKLQkgICBkaXIpCi0JICAoY3JlYXRlCi0JICAgKGNvbmRpdGlv bi1jYXNlIG5pbAotCSAgICAgICAocHJvZ24gKG1ha2UtZGlyZWN0b3J5IGRpciB0KSBkaXIpCi0J ICAgICAoZXJyb3IgbmlsKSkpKSkpCi0KLTs7IElmIHlvdSBhcmUgd29uZGVyaW5nIHdoeSB3ZSBv bmx5IGhhc2ggaWYgdGhlIGRpcmVjdG9yeSBpcyBub3QgIi4iLCByYXRoZXIKLTs7IHRoYW4gaWYg YGZpbGUtbmFtZS1hYnNvbHV0ZS1wJywgaXQgaXMgYmVjYXVzZSBpZiB3ZSBqdXN0IGFwcGVuZGVk ICIuZmxjIiBmb3IKLTs7IHJlbGF0aXZlIGNhY2hlIGRpcmVjdG9yaWVzICh0aGF0IGFyZSBub3Qg Ii4iKSB0aGVuIGl0IGlzIHBvc3NpYmxlIHRoYXQgbW9yZQotOzsgdGhhbiBvbmUgZmlsZSB3b3Vs ZCBoYXZlIHRoZSBzYW1lIGNhY2hlIG5hbWUgaW4gdGhhdCBkaXJlY3RvcnksIGlmIHRoZSBsdXNl cgotOzsgbWFkZSBhIGxpbmsgZnJvbSBvbmUgcmVsYXRpdmUgY2FjaGUgZGlyZWN0b3J5IHRvIGFu b3RoZXIuICAoUGhldyEpCi0oZGVmdW4gZmFzdC1sb2NrLWNhY2hlLW5hbWUgKGRpcmVjdG9yeSkK LSAgIlJldHVybiBmdWxsIGNhY2hlIGZpbGUgbmFtZSB1c2luZyBjYWNoaW5nIERJUkVDVE9SWS4K LUlmIERJUkVDVE9SWSBpcyBgLicsIHRoZSBmaWxlIG5hbWUgaXMgdGhlIGJ1ZmZlciBmaWxlIG5h bWUgYXBwZW5kZWQgd2l0aCBgLmZsYycuCi1PdGhlcndpc2UsIHRoZSBmaWxlIG5hbWUgaXMgY29u c3RydWN0ZWQgZnJvbSBESVJFQ1RPUlkgYW5kIHRoZSBidWZmZXIncyB0cnVlCi1hYmJyZXZpYXRl ZCBmaWxlIG5hbWUsIHdpdGggYWxsIGAvJyBjaGFyYWN0ZXJzIGluIHRoZSBuYW1lIHJlcGxhY2Vk IHdpdGggYCMnCi1jaGFyYWN0ZXJzLCBhbmQgYXBwZW5kZWQgd2l0aCBgLmZsYycuCi0KLUlmIHRo ZSBzYW1lIGZpbGUgaGFzIGRpZmZlcmVudCBjYWNoZSBmaWxlIG5hbWVzIHdoZW4gZWRpdGVkIG9u IGRpZmZlcmVudAotbWFjaGluZXMsIGUuZy4sIG9uIG9uZSBtYWNoaW5lIHRoZSBjYWNoZSBmaWxl IG5hbWUgaGFzIHRoZSBwcmVmaXggYCNob21lJywKLXBlcmhhcHMgZHVlIHRvIGF1dG9tb3VudCwg dHJ5IHB1dHRpbmcgaW4geW91ciBgfi8uZW1hY3MnIHNvbWV0aGluZyBsaWtlOgotCi0gKHNldHEg ZGlyZWN0b3J5LWFiYnJldi1hbGlzdCAoY29ucyBcXD0nKFwiXi9ob21lL1wiIC4gXCIvXCIpIGRp cmVjdG9yeS1hYmJyZXYtYWxpc3QpKQotCi1FbWFjcyBhdXRvbWFnaWNhbGx5IHJlbW92ZXMgdGhl IGNvbW1vbiBgL3RtcF9tbnQnIGF1dG9tb3VudCBwcmVmaXggYnkgZGVmYXVsdC4KLQotU2VlIGBm YXN0LWxvY2stY2FjaGUtZGlyZWN0b3J5Jy4iCi0gIChpZiAoc3RyaW5nLWVxdWFsIGRpcmVjdG9y eSAiLiIpCi0gICAgICAoY29uY2F0IGJ1ZmZlci1maWxlLW5hbWUgIi5mbGMiKQotICAgIChsZXQq ICgoYnVmaWxlIChleHBhbmQtZmlsZS1uYW1lIGJ1ZmZlci1maWxlLXRydWVuYW1lKSkKLQkgICAo Y2hhcnMtYWxpc3QKLQkgICAgKGlmIChtZW1xIHN5c3RlbS10eXBlICcod2luZG93cy1udCBjeWd3 aW4pKQotCQknKCg/LyAuICg/IykpICg/IyAuICg/IyA/IykpICg/OiAuICg/XDspKSAoP1w7IC4g KD9cOyA/XDspKSkKLQkgICAgICAnKCg/LyAuICg/IykpICg/IyAuICg/IyA/IykpKSkpCi0JICAg KG1hcGNoYXJzCi0JICAgIChmdW5jdGlvbiAobGFtYmRhIChjKSAob3IgKGNkciAoYXNzcSBjIGNo YXJzLWFsaXN0KSkgKGxpc3QgYykpKSkpKQotICAgICAgKGNvbmNhdAotICAgICAgIChmaWxlLW5h bWUtYXMtZGlyZWN0b3J5IChleHBhbmQtZmlsZS1uYW1lIGRpcmVjdG9yeSkpCi0gICAgICAgKG1h cGNvbmNhdCAjJ2NoYXItdG8tc3RyaW5nIChhcHBseSAjJ2FwcGVuZCAobWFwY2FyIG1hcGNoYXJz IGJ1ZmlsZSkpICIiKQotICAgICAgICIuZmxjIikpKSkKLQwKLTs7IEZvbnQgTG9jayBDYWNoZSBQ cm9jZXNzaW5nIEZ1bmN0aW9uczoKLQotOzsgVGhlIHZlcnNpb24gMyBmb3JtYXQgb2YgdGhlIGNh Y2hlIGlzOgotOzsKLTs7IChmYXN0LWxvY2stY2FjaGUtZGF0YSBWRVJTSU9OIFRJTUVTVEFNUAot OzsgIGZvbnQtbG9jay1zeW50YWN0aWMta2V5d29yZHMgU1lOVEFDVElDLVBST1BFUlRJRVMKLTs7 ICBmb250LWxvY2sta2V5d29yZHMgRkFDRS1QUk9QRVJUSUVTKQotCi0oZGVmdW4gZmFzdC1sb2Nr LXNhdmUtY2FjaGUtMSAoZmlsZSB0aW1lc3RhbXApCi0gIDs7IFNhdmUgdGhlIEZJTEUgd2l0aCB0 aGUgVElNRVNUQU1QIHBsdXMgZm9udGlmaWNhdGlvbiBkYXRhLgotICA7OyBSZXR1cm5zIG5vbi1u aWwgaWYgYSBzYXZlIHdhcyBhdHRlbXB0ZWQgdG8gYSB3cml0YWJsZSBjYWNoZSBmaWxlLgotICAo bGV0ICgodHBidWYgKGdlbmVyYXRlLW5ldy1idWZmZXIgIiAqZmFzdC1sb2NrKiIpKQotCSh2ZXJi b3NlIChpZiAobnVtYmVycCBmYXN0LWxvY2stdmVyYm9zZSkKLQkJICAgICAoPiAoYnVmZmVyLXNp emUpIGZhc3QtbG9jay12ZXJib3NlKQotCQkgICBmYXN0LWxvY2stdmVyYm9zZSkpCi0JKHNhdmVk IHQpKQotICAgICh3aXRoLXRlbXAtbWVzc2FnZQotCSh3aGVuIHZlcmJvc2UKLQkgIChmb3JtYXQg IlNhdmluZyAlcyBmb250IGxvY2sgY2FjaGUuLi4iIChidWZmZXItbmFtZSkpKQotICAgICAgKGNv bmRpdGlvbi1jYXNlIG5pbAotCSAgKHNhdmUtZXhjdXJzaW9uCi0JICAgIChwcmludCAobGlzdCAn ZmFzdC1sb2NrLWNhY2hlLWRhdGEgMwotCQkJIChsaXN0ICdxdW90ZSB0aW1lc3RhbXApCi0JCQkg KGxpc3QgJ3F1b3RlIGZvbnQtbG9jay1zeW50YWN0aWMta2V5d29yZHMpCi0JCQkgKGxpc3QgJ3F1 b3RlIChmYXN0LWxvY2stZ2V0LXN5bnRhY3RpYy1wcm9wZXJ0aWVzKSkKLQkJCSAobGlzdCAncXVv dGUgZm9udC1sb2NrLWtleXdvcmRzKQotCQkJIChsaXN0ICdxdW90ZSAoZmFzdC1sb2NrLWdldC1m YWNlLXByb3BlcnRpZXMpKSkKLQkJICAgdHBidWYpCi0JICAgIChzZXQtYnVmZmVyIHRwYnVmKQot CSAgICAod3JpdGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpIGZpbGUgbmlsICdxdWll dGx5KQotCSAgICAoc2V0cSBmYXN0LWxvY2stY2FjaGUtdGltZXN0YW1wIHRpbWVzdGFtcAotCQkg IGZhc3QtbG9jay1jYWNoZS1maWxlbmFtZSBmaWxlKSkKLQkoZXJyb3IgKHNldHEgc2F2ZWQgJ2Vy cm9yKSkgKHF1aXQgKHNldHEgc2F2ZWQgJ3F1aXQpKSkKLSAgICAgIChraWxsLWJ1ZmZlciB0cGJ1 ZikpCi0gICAgKGNvbmQgKChlcSBzYXZlZCAncXVpdCkKLQkgICAobWVzc2FnZSAiU2F2aW5nICVz IGZvbnQgbG9jayBjYWNoZS4uLnF1aXQiIChidWZmZXItbmFtZSkpKQotCSAgKChlcSBzYXZlZCAn ZXJyb3IpCi0JICAgKG1lc3NhZ2UgIlNhdmluZyAlcyBmb250IGxvY2sgY2FjaGUuLi5mYWlsZWQi IChidWZmZXItbmFtZSkpKSkKLSAgICA7OyBXZSByZXR1cm4gbm9uLW5pbCByZWdhcmRsZXNzIG9m IHdoZXRoZXIgYSBmYWlsdXJlIG9jY3VycmVkLgotICAgIHNhdmVkKSkKLQotKGRlZnVuIGZhc3Qt bG9jay1jYWNoZS1kYXRhICh2ZXJzaW9uIHRpbWVzdGFtcAotCQkJICAgICBzeW50YWN0aWMta2V5 d29yZHMgc3ludGFjdGljLXByb3BlcnRpZXMKLQkJCSAgICAga2V5d29yZHMgZmFjZS1wcm9wZXJ0 aWVzCi0JCQkgICAgICZyZXN0IF9pZ25vcmVkKQotICA7OyBGaW5kIHZhbHVlIG9mIHN5bnRhY3Rp YyBrZXl3b3JkcyBpbiBjYXNlIGl0IGlzIGEgc3ltYm9sLgotICAoc2V0cSBmb250LWxvY2stc3lu dGFjdGljLWtleXdvcmRzIChmb250LWxvY2stZXZhbC1rZXl3b3JkcwotCQkJCSAgICAgIGZvbnQt bG9jay1zeW50YWN0aWMta2V5d29yZHMpKQotICA7OyBDb21waWxlIGFsbCBrZXl3b3JkcyBpbiBj YXNlIHNvbWUgYXJlIGFuZCBzb21lIGFyZW4ndC4KLSAgKHdoZW4gZm9udC1sb2NrLXN5bnRhY3Rp Yy1rZXl3b3JkcwotICAgIChzZXRxIGZvbnQtbG9jay1zeW50YWN0aWMta2V5d29yZHMgKGZvbnQt bG9jay1jb21waWxlLWtleXdvcmRzCi0JCQkJCWZvbnQtbG9jay1zeW50YWN0aWMta2V5d29yZHMg dCkpKQotICAod2hlbiBzeW50YWN0aWMta2V5d29yZHMKLSAgICAoc2V0cSBzeW50YWN0aWMta2V5 d29yZHMgKGZvbnQtbG9jay1jb21waWxlLWtleXdvcmRzIHN5bnRhY3RpYy1rZXl3b3JkcyB0KSkp Ci0gIChzZXRxIGZvbnQtbG9jay1rZXl3b3JkcyAoZm9udC1sb2NrLWNvbXBpbGUta2V5d29yZHMg Zm9udC1sb2NrLWtleXdvcmRzKQotCWtleXdvcmRzIChmb250LWxvY2stY29tcGlsZS1rZXl3b3Jk cyBrZXl3b3JkcykpCi0gIDs7IFVzZSB0aGUgRm9udCBMb2NrIGNhY2hlIFNZTlRBQ1RJQy1QUk9Q RVJUSUVTIGFuZCBGQUNFLVBST1BFUlRJRVMgaWYgd2UncmUKLSAgOzsgdXNpbmcgY2FjaGUgVkVS U0lPTiBmb3JtYXQgMywgdGhlIGN1cnJlbnQgYnVmZmVyJ3MgZmlsZSB0aW1lc3RhbXAgbWF0Y2hl cwotICA7OyB0aGUgVElNRVNUQU1QLCB0aGUgY3VycmVudCBidWZmZXIncyBgZm9udC1sb2NrLXN5 bnRhY3RpYy1rZXl3b3JkcycgYXJlIHRoZQotICA7OyBzYW1lIGFzIFNZTlRBQ1RJQy1LRVlXT1JE UywgYW5kIHRoZSBjdXJyZW50IGJ1ZmZlcidzIGBmb250LWxvY2sta2V5d29yZHMnCi0gIDs7IGFy ZSB0aGUgc2FtZSBhcyBLRVlXT1JEUy4KLSAgKGxldCAoKGJ1Zi10aW1lc3RhbXAgKHZpc2l0ZWQt ZmlsZS1tb2R0aW1lKSkKLQkodmVyYm9zZSAoaWYgKG51bWJlcnAgZmFzdC1sb2NrLXZlcmJvc2Up Ci0JCSAgICAgKD4gKGJ1ZmZlci1zaXplKSBmYXN0LWxvY2stdmVyYm9zZSkKLQkJICAgZmFzdC1s b2NrLXZlcmJvc2UpKQotCShsb2FkZWQgdCkpCi0gICAgKGlmIChvciAoLz0gdmVyc2lvbiAzKQot CSAgICAoYnVmZmVyLW1vZGlmaWVkLXApCi0JICAgIChub3QgKGVxdWFsIHRpbWVzdGFtcCBidWYt dGltZXN0YW1wKSkKLQkgICAgKG5vdCAoZXF1YWwgc3ludGFjdGljLWtleXdvcmRzIGZvbnQtbG9j ay1zeW50YWN0aWMta2V5d29yZHMpKQotCSAgICAobm90IChlcXVhbCBrZXl3b3JkcyBmb250LWxv Y2sta2V5d29yZHMpKSkKLQkoc2V0cSBsb2FkZWQgbmlsKQotICAgICAgKHdpdGgtdGVtcC1tZXNz YWdlCi0JICAod2hlbiB2ZXJib3NlCi0JICAgIChmb3JtYXQgIkxvYWRpbmcgJXMgZm9udCBsb2Nr IGNhY2hlLi4uIiAoYnVmZmVyLW5hbWUpKSkKLQkoY29uZGl0aW9uLWNhc2UgbmlsCi0JICAgIChm YXN0LWxvY2stYWRkLXByb3BlcnRpZXMgc3ludGFjdGljLXByb3BlcnRpZXMgZmFjZS1wcm9wZXJ0 aWVzKQotCSAgKGVycm9yIChzZXRxIGxvYWRlZCAnZXJyb3IpKSAocXVpdCAoc2V0cSBsb2FkZWQg J3F1aXQpKSkpCi0gICAgICAoY29uZCAoKGVxIGxvYWRlZCAncXVpdCkKLQkgICAgIChtZXNzYWdl ICJMb2FkaW5nICVzIGZvbnQgbG9jayBjYWNoZS4uLnF1aXQiIChidWZmZXItbmFtZSkpKQotCSAg ICAoKGVxIGxvYWRlZCAnZXJyb3IpCi0JICAgICAobWVzc2FnZSAiTG9hZGluZyAlcyBmb250IGxv Y2sgY2FjaGUuLi5mYWlsZWQiIChidWZmZXItbmFtZSkpKSkpCi0gICAgKHNldHEgZm9udC1sb2Nr LWZvbnRpZmllZCAoZXEgbG9hZGVkIHQpCi0JICBmYXN0LWxvY2stY2FjaGUtdGltZXN0YW1wIChh bmQgKGVxIGxvYWRlZCB0KSB0aW1lc3RhbXApKSkpCi0MCi07OyBUZXh0IFByb3BlcnRpZXMgUHJv Y2Vzc2luZyBGdW5jdGlvbnM6Ci0KLTs7IFRoaXMgaXMgZmFzdCwgYnV0IGZhaWxzIGlmIGFkamFj ZW50IGNoYXJhY3RlcnMgaGF2ZSBkaWZmZXJlbnQgYGZhY2UnIHRleHQKLTs7IHByb3BlcnRpZXMu ICBNYXliZSB0aGF0J3Mgd2h5IEkgZHJvcHBlZCBpdCBpbiB0aGUgZmlyc3QgcGxhY2U/Ci07KGRl ZnVuIGZhc3QtbG9jay1nZXQtZmFjZS1wcm9wZXJ0aWVzICgpCi07ICAiUmV0dXJuIGEgbGlzdCBv ZiBgZmFjZScgdGV4dCBwcm9wZXJ0aWVzIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KLTtFYWNoIGVs ZW1lbnQgb2YgdGhlIGxpc3QgaXMgb2YgdGhlIGZvcm0gKFZBTFVFIFNUQVJUMSBFTkQxIFNUQVJU MiBFTkQyIC4uLikKLTt3aGVyZSBWQUxVRSBpcyBhIGBmYWNlJyBwcm9wZXJ0eSB2YWx1ZSBhbmQg U1RBUlR4IGFuZCBFTkR4IGFyZSBwb3NpdGlvbnMuIgotOyAgKHNhdmUtcmVzdHJpY3Rpb24KLTsg ICAgKHdpZGVuKQotOyAgICAobGV0ICgoc3RhcnQgKHRleHQtcHJvcGVydHktbm90LWFsbCAocG9p bnQtbWluKSAocG9pbnQtbWF4KSAnZmFjZSBuaWwpKQotOwkgIChsaW1pdCAocG9pbnQtbWF4KSkg ZW5kIHByb3BlcnRpZXMgdmFsdWUgY2VsbCkKLTsgICAgICAod2hpbGUgc3RhcnQKLTsJKHNldHEg ZW5kIChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2Ugc3RhcnQgJ2ZhY2UgbmlsIGxpbWl0KQot OwkgICAgICB2YWx1ZSAoZ2V0LXRleHQtcHJvcGVydHkgc3RhcnQgJ2ZhY2UpKQotOwk7OyBNYWtl LCBvciBhZGQgdG8gZXhpc3RpbmcsIGxpc3Qgb2YgcmVnaW9ucyB3aXRoIHNhbWUgYGZhY2UnLgot OwkoaWYgKHNldHEgY2VsbCAoYXNzcSB2YWx1ZSBwcm9wZXJ0aWVzKSkKLTsJICAgIChzZXRjZHIg Y2VsbCAoY29ucyBzdGFydCAoY29ucyBlbmQgKGNkciBjZWxsKSkpKQotOwkgIChzZXRxIHByb3Bl cnRpZXMgKGNvbnMgKGxpc3QgdmFsdWUgc3RhcnQgZW5kKSBwcm9wZXJ0aWVzKSkpCi07CShzZXRx IHN0YXJ0IChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UgZW5kICdmYWNlKSkpCi07ICAgICAg cHJvcGVydGllcykpKQotCi07OyBUaGlzIGlzIHNsb3csIGJ1dCBjb3BlcyBpZiBhZGphY2VudCBj aGFyYWN0ZXJzIGhhdmUgZGlmZmVyZW50IGBmYWNlJyB0ZXh0Ci07OyBwcm9wZXJ0aWVzLCBidXQg ZmFpbHMgaWYgdGhleSBhcmUgbGlzdHMuCi07KGRlZnVuIGZhc3QtbG9jay1nZXQtZmFjZS1wcm9w ZXJ0aWVzICgpCi07ICAiUmV0dXJuIGEgbGlzdCBvZiBgZmFjZScgdGV4dCBwcm9wZXJ0aWVzIGlu IHRoZSBjdXJyZW50IGJ1ZmZlci4KLTtFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QgaXMgb2YgdGhl IGZvcm0gKFZBTFVFIFNUQVJUMSBFTkQxIFNUQVJUMiBFTkQyIC4uLikKLTt3aGVyZSBWQUxVRSBp cyBhIGBmYWNlJyBwcm9wZXJ0eSB2YWx1ZSBhbmQgU1RBUlR4IGFuZCBFTkR4IGFyZSBwb3NpdGlv bnMuCi07T25seSB0aG9zZSBgZmFjZScgVkFMVUVzIGluIGBmYXN0LWxvY2stc2F2ZS1mYWNlcycg YXJlIHJldHVybmVkLiIKLTsgIChzYXZlLXJlc3RyaWN0aW9uCi07ICAgICh3aWRlbikKLTsgICAg KGxldCAoKGZhY2VzIChvciBmYXN0LWxvY2stc2F2ZS1mYWNlcyAoZmFjZS1saXN0KSkpIChsaW1p dCAocG9pbnQtbWF4KSkKLTsJICBwcm9wZXJ0aWVzIHJlZ2lvbnMgZmFjZSBzdGFydCBlbmQpCi07 ICAgICAgKHdoaWxlIGZhY2VzCi07CShzZXRxIGZhY2UgKGNhciBmYWNlcykgZmFjZXMgKGNkciBm YWNlcykgcmVnaW9ucyAoKSBlbmQgKHBvaW50LW1pbikpCi07CTs7IE1ha2UgYSBsaXN0IG9mIHN0 YXJ0L2VuZCByZWdpb25zIHdpdGggYGZhY2UnIHByb3BlcnR5IGZhY2UuCi07CSh3aGlsZSAoc2V0 cSBzdGFydCAodGV4dC1wcm9wZXJ0eS1hbnkgZW5kIGxpbWl0ICdmYWNlIGZhY2UpKQotOwkgIChz ZXRxIGVuZCAob3IgKHRleHQtcHJvcGVydHktbm90LWFsbCBzdGFydCBsaW1pdCAnZmFjZSBmYWNl KSBsaW1pdCkKLTsJCXJlZ2lvbnMgKGNvbnMgc3RhcnQgKGNvbnMgZW5kIHJlZ2lvbnMpKSkpCi07 CTs7IEFkZCBgZmFjZScgZmFjZSdzIHJlZ2lvbnMsIGlmIGFueSwgdG8gcHJvcGVydGllcy4KLTsJ KHdoZW4gcmVnaW9ucwotOwkgIChwdXNoIChjb25zIGZhY2UgcmVnaW9ucykgcHJvcGVydGllcykp KQotOyAgICAgIHByb3BlcnRpZXMpKSkKLQotKGRlZnVuIGZhc3QtbG9jay1nZXQtZmFjZS1wcm9w ZXJ0aWVzICgpCi0gICJSZXR1cm4gYSBsaXN0IG9mIGBmYWNlJyB0ZXh0IHByb3BlcnRpZXMgaW4g dGhlIGN1cnJlbnQgYnVmZmVyLgotRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IGlzIG9mIHRoZSBm b3JtIChWQUxVRSBTVEFSVDEgRU5EMSBTVEFSVDIgRU5EMiAuLi4pCi13aGVyZSBWQUxVRSBpcyBh IGBmYWNlJyBwcm9wZXJ0eSB2YWx1ZSBhbmQgU1RBUlR4IGFuZCBFTkR4IGFyZSBwb3NpdGlvbnMu IgotICAoc2F2ZS1yZXN0cmljdGlvbgotICAgICh3aWRlbikKLSAgICAobGV0ICgoc3RhcnQgKHRl eHQtcHJvcGVydHktbm90LWFsbCAocG9pbnQtbWluKSAocG9pbnQtbWF4KSAnZmFjZSBuaWwpKQot CSAgZW5kIHByb3BlcnRpZXMgdmFsdWUgY2VsbCkKLSAgICAgICh3aGlsZSBzdGFydAotCShzZXRx IGVuZCAobmV4dC1zaW5nbGUtcHJvcGVydHktY2hhbmdlIHN0YXJ0ICdmYWNlIG5pbCAocG9pbnQt bWF4KSkKLQkgICAgICB2YWx1ZSAoZ2V0LXRleHQtcHJvcGVydHkgc3RhcnQgJ2ZhY2UpKQotCTs7 IE1ha2UsIG9yIGFkZCB0byBleGlzdGluZywgbGlzdCBvZiByZWdpb25zIHdpdGggc2FtZSBgZmFj ZScuCi0JKGNvbmQgKChzZXRxIGNlbGwgKGFzc29jIHZhbHVlIHByb3BlcnRpZXMpKQotCSAgICAg ICAoc2V0Y2RyIGNlbGwgKGNvbnMgc3RhcnQgKGNvbnMgZW5kIChjZHIgY2VsbCkpKSkpCi0JICAg ICAgKChmYXN0LWxvY2stc2F2ZS1mYWNlcCB2YWx1ZSkKLQkgICAgICAgKHB1c2ggKGxpc3QgdmFs dWUgc3RhcnQgZW5kKSBwcm9wZXJ0aWVzKSkpCi0JKHNldHEgc3RhcnQgKHRleHQtcHJvcGVydHkt bm90LWFsbCBlbmQgKHBvaW50LW1heCkgJ2ZhY2UgbmlsKSkpCi0gICAgICBwcm9wZXJ0aWVzKSkp Ci0KLShkZWZ1biBmYXN0LWxvY2stZ2V0LXN5bnRhY3RpYy1wcm9wZXJ0aWVzICgpCi0gICJSZXR1 cm4gYSBsaXN0IG9mIGBzeW50YXgtdGFibGUnIHRleHQgcHJvcGVydGllcyBpbiB0aGUgY3VycmVu dCBidWZmZXIuCi1TZWUgYGZhc3QtbG9jay1nZXQtZmFjZS1wcm9wZXJ0aWVzJy4iCi0gIChzYXZl LXJlc3RyaWN0aW9uCi0gICAgKHdpZGVuKQotICAgIChsZXQgKChzdGFydCAodGV4dC1wcm9wZXJ0 eS1ub3QtYWxsIChwb2ludC1taW4pIChwb2ludC1tYXgpICdzeW50YXgtdGFibGUKLQkJCQkJbmls KSkKLQkgIGVuZCBwcm9wZXJ0aWVzIHZhbHVlIGNlbGwpCi0gICAgICAod2hpbGUgc3RhcnQKLQko c2V0cSBlbmQgKG5leHQtc2luZ2xlLXByb3BlcnR5LWNoYW5nZSBzdGFydCAnc3ludGF4LXRhYmxl IG5pbAotCQkJCQkgICAgICAgKHBvaW50LW1heCkpCi0JICAgICAgdmFsdWUgKGdldC10ZXh0LXBy b3BlcnR5IHN0YXJ0ICdzeW50YXgtdGFibGUpKQotCTs7IE1ha2UsIG9yIGFkZCB0byBleGlzdGlu ZywgbGlzdCBvZiByZWdpb25zIHdpdGggc2FtZSBgc3ludGF4LXRhYmxlJy4KLQkoaWYgKHNldHEg Y2VsbCAoYXNzb2MgdmFsdWUgcHJvcGVydGllcykpCi0JICAgIChzZXRjZHIgY2VsbCAoY29ucyBz dGFydCAoY29ucyBlbmQgKGNkciBjZWxsKSkpKQotCSAgKHB1c2ggKGxpc3QgdmFsdWUgc3RhcnQg ZW5kKSBwcm9wZXJ0aWVzKSkKLQkoc2V0cSBzdGFydCAodGV4dC1wcm9wZXJ0eS1ub3QtYWxsIGVu ZCAocG9pbnQtbWF4KSAnc3ludGF4LXRhYmxlIG5pbCkpKQotICAgICAgcHJvcGVydGllcykpKQot Ci0oZGVmdW4gZmFzdC1sb2NrLWFkZC1wcm9wZXJ0aWVzIChzeW50YWN0aWMtcHJvcGVydGllcyBm YWNlLXByb3BlcnRpZXMpCi0gICJBZGQgYHN5bnRheC10YWJsZScgYW5kIGBmYWNlJyB0ZXh0IHBy b3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLgotQW55IGV4aXN0aW5nIGBzeW50YXgtdGFi bGUnIGFuZCBgZmFjZScgdGV4dCBwcm9wZXJ0aWVzIGFyZSByZW1vdmVkIGZpcnN0LgotU2VlIGBm YXN0LWxvY2stZ2V0LWZhY2UtcHJvcGVydGllcycuIgotICAod2l0aC1zaWxlbnQtbW9kaWZpY2F0 aW9ucwotICAgIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcyB0KSkKLSAgICAgIChz YXZlLXJlc3RyaWN0aW9uCi0gICAgICAgICh3aWRlbikKLSAgICAgICAgKGZvbnQtbG9jay11bmZv bnRpZnktcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQotICAgICAgICA7OwotICAgICAg ICA7OyBTZXQgdGhlIGBzeW50YXgtdGFibGUnIHByb3BlcnR5IGZvciBlYWNoIHN0YXJ0L2VuZCBy ZWdpb24uCi0gICAgICAgIChwY2FzZS1kb2xpc3QgKGAoLHBsaXN0IC4gLHJlZ2lvbnMpIHN5bnRh Y3RpYy1wcm9wZXJ0aWVzKQotCSAgKHdoaWxlIHJlZ2lvbnMKLQkgICAgKGFkZC10ZXh0LXByb3Bl cnRpZXMgKG50aCAwIHJlZ2lvbnMpIChudGggMSByZWdpb25zKSBwbGlzdCkKLQkgICAgKHNldHEg cmVnaW9ucyAobnRoY2RyIDIgcmVnaW9ucykpKSkKLQk7OwotCTs7IFNldCB0aGUgYGZhY2UnIHBy b3BlcnR5IGZvciBlYWNoIHN0YXJ0L2VuZCByZWdpb24uCi0gICAgICAgIChwY2FzZS1kb2xpc3Qg KGAoLHBsaXN0IC4gLHJlZ2lvbnMpIGZhY2UtcHJvcGVydGllcykKLQkgICh3aGlsZSByZWdpb25z Ci0JICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIChudGggMCByZWdpb25zKSAobnRoIDEgcmVnaW9u cykgcGxpc3QpCi0JICAgIChzZXRxIHJlZ2lvbnMgKG50aGNkciAyIHJlZ2lvbnMpKSkpKSkpKQot Ci0MCi07OyBJbnN0YWxsIG91cnNlbHZlczoKLQotKGFkZC1ob29rICdhZnRlci1zYXZlLWhvb2sg IydmYXN0LWxvY2stc2F2ZS1jYWNoZS1hZnRlci1zYXZlLWZpbGUpCi0oYWRkLWhvb2sgJ2tpbGwt YnVmZmVyLWhvb2sgIydmYXN0LWxvY2stc2F2ZS1jYWNoZS1iZWZvcmUta2lsbC1idWZmZXIpCi0o dW5sZXNzIG5vbmludGVyYWN0aXZlCi0gIChhZGQtaG9vayAna2lsbC1lbWFjcy1ob29rICMnZmFz dC1sb2NrLXNhdmUtY2FjaGVzLWJlZm9yZS1raWxsLWVtYWNzKSkKLQotOzs7IyMjYXV0b2xvYWQK LSh3aGVuIChmYm91bmRwICdhZGQtbWlub3ItbW9kZSkKLSAgKGRlZnZhciBmYXN0LWxvY2stbW9k ZSBuaWwpCi0gIChhZGQtbWlub3ItbW9kZSAnZmFzdC1sb2NrLW1vZGUgbmlsKSkKLTs7OyMjI2Rv bnQtYXV0b2xvYWQKLSh1bmxlc3MgKGFzc3EgJ2Zhc3QtbG9jay1tb2RlIG1pbm9yLW1vZGUtYWxp c3QpCi0gIChzZXRxIG1pbm9yLW1vZGUtYWxpc3QgKGFwcGVuZCBtaW5vci1tb2RlLWFsaXN0ICco KGZhc3QtbG9jay1tb2RlIG5pbCkpKSkpCi0KLShwcm92aWRlICdmYXN0LWxvY2spCi0KLTs7OyBm YXN0LWxvY2suZWwgZW5kcyBoZXJlCi0KLTs7IExvY2FsIFZhcmlhYmxlczoKLTs7IGJ5dGUtY29t cGlsZS13YXJuaW5nczogKG5vdCBvYnNvbGV0ZSkKLTs7IEVuZDoKZGlmZiAtLWdpdCBhL2xpc3Av b2Jzb2xldGUvbGF6eS1sb2NrLmVsIGIvbGlzcC9vYnNvbGV0ZS9sYXp5LWxvY2suZWwKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMzVjYjMyMTIuLjAwMDAwMDAwMDAKLS0tIGEvbGlz cC9vYnNvbGV0ZS9sYXp5LWxvY2suZWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDI1ICswLDAgQEAK LTs7OyBsYXp5LWxvY2suZWwgLS0tIGxhenkgZGVtYW5kLWRyaXZlbiBmb250aWZpY2F0aW9uIGZv ciBmYXN0IEZvbnQgTG9jayBtb2RlICAtKi0gbGV4aWNhbC1iaW5kaW5nOiB0OyAtKi0KLQotOzsg Q29weXJpZ2h0IChDKSAxOTk0LTE5OTgsIDIwMDEtMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KLQotOzsgQXV0aG9yOiBTaW1vbiBNYXJzaGFsbCA8c2ltb25AZ251Lm9yZz4KLTs7 IE1haW50YWluZXI6IGVtYWNzLWRldmVsQGdudS5vcmcKLTs7IEtleXdvcmRzOiBmYWNlcyBmaWxl cwotOzsgVmVyc2lvbjogMi4xMQotOzsgT2Jzb2xldGUtc2luY2U6IDIyLjEKLQotOzsgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgotCi07OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotOzsgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK LTs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCi07OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi07 OyBHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKLTs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi07OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi07OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgotCi07OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotOzsgYWxvbmcgd2l0aCBHTlUgRW1hY3Mu ICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi07OzsgQ29t bWVudGFyeToKLQotOzsgUHVycG9zZToKLTs7Ci07OyBMYXp5IExvY2sgbW9kZSBpcyBhIEZvbnQg TG9jayBzdXBwb3J0IG1vZGUuCi07OyBJdCBtYWtlcyB2aXNpdGluZyBidWZmZXJzIGluIEZvbnQg TG9jayBtb2RlIGZhc3RlciBieSBtYWtpbmcgZm9udGlmaWNhdGlvbgotOzsgYmUgZGVtYW5kLWRy aXZlbiwgZGVmZXJyZWQgYW5kIHN0ZWFsdGh5LCBzbyB0aGF0IGZvbnRpZmljYXRpb24gb25seSBv Y2N1cnMKLTs7IHdoZW4sIGFuZCB3aGVyZSwgbmVjZXNzYXJ5LgotOzsKLTs7IFNlZSBjYXZlYXRz IGFuZCBmZWVkYmFjayBiZWxvdy4KLTs7IFNlZSBhbHNvIHRoZSBmYXN0LWxvY2sgcGFja2FnZS4g IChCdXQgZG9uJ3QgdXNlIHRoZW0gYXQgdGhlIHNhbWUgdGltZSEpCi0KLTs7IEluc3RhbGxhdGlv bjoKLTs7Ci07OyBQdXQgaW4geW91ciB+Ly5lbWFjczoKLTs7Ci07OyAoc2V0cSBmb250LWxvY2st c3VwcG9ydC1tb2RlICdsYXp5LWxvY2stbW9kZSkKLTs7Ci07OyBTdGFydCB1cCBhIG5ldyBFbWFj cyBhbmQgdXNlIGZvbnQtbG9jayBhcyB1c3VhbCAoZXhjZXB0IHRoYXQgeW91IGNhbiB1c2UgdGhl Ci07OyBzby1jYWxsZWQgImdhdWRpZXIiIGZvbnRpZmljYXRpb24gcmVnZXhwcyBvbiBiaWcgZmls ZXMgd2l0aG91dCBmcnVzdHJhdGlvbikuCi07OwotOzsgSW4gYSBidWZmZXIgKHdoaWNoIGhhcyBg Zm9udC1sb2NrLW1vZGUnIGVuYWJsZWQpIHdoaWNoIGlzIGF0IGxlYXN0Ci07OyBgbGF6eS1sb2Nr LW1pbmltdW0tc2l6ZScgY2hhcmFjdGVycyBsb25nLCBidWZmZXIgZm9udGlmaWNhdGlvbiB3aWxs IG5vdAotOzsgb2NjdXIgYW5kIG9ubHkgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgYnVmZmVy IHdpbGwgYmUgZm9udGlmaWVkLiAgTW90aW9uCi07OyBhcm91bmQgdGhlIGJ1ZmZlciB3aWxsIGZv bnRpZnkgdGhvc2UgdmlzaWJsZSBwb3J0aW9ucyBub3QgcHJldmlvdXNseQotOzsgZm9udGlmaWVk LiAgSWYgc3RlYWx0aCBmb250aWZpY2F0aW9uIGlzIGVuYWJsZWQsIGJ1ZmZlciBmb250aWZpY2F0 aW9uIHdpbGwKLTs7IG9jY3VyIGluIGludmlzaWJsZSBwYXJ0cyBvZiB0aGUgYnVmZmVyIGFmdGVy IGBsYXp5LWxvY2stc3RlYWx0aC10aW1lJwotOzsgc2Vjb25kcyBvZiBpZGxlIHRpbWUuICBJZiBv bi10aGUtZmx5IGZvbnRpZmljYXRpb24gaXMgZGVmZXJyZWQsIG9uLXRoZS1mbHkKLTs7IGZvbnRp ZmljYXRpb24gd2lsbCBvY2N1ciBhZnRlciBgbGF6eS1sb2NrLWRlZmVyLXRpbWUnIHNlY29uZHMg b2YgaWRsZSB0aW1lLgotCi07OyBVc2VyLXZpc2libGUgZGlmZmVyZW5jZXMgd2l0aCB2ZXJzaW9u IDE6Ci07OwotOzsgLSBWZXJzaW9uIDIgY2FuIGRlZmVyIG9uLXRoZS1mbHkgZm9udGlmaWNhdGlv bi4gIFRoZXJlZm9yZSB5b3UgbmVlZCBub3QsIGFuZAotOzsgc2hvdWxkIG5vdCwgdXNlIGRlZmVy LWxvY2suZWwgd2l0aCB0aGlzIHZlcnNpb24gb2YgbGF6eS1sb2NrLmVsLgotOzsKLTs7IEEgbnVt YmVyIG9mIHZhcmlhYmxlcyBoYXZlIGNoYW5nZWQgbWVhbmluZzoKLTs7Ci07OyAtIEEgdmFsdWUg b2YgbmlsIGZvciB0aGUgdmFyaWFibGUgYGxhenktbG9jay1taW5pbXVtLXNpemUnIG1lYW5zIG5l dmVyIHR1cm4KLTs7IG9uIGRlbWFuZC1kcml2ZW4gZm9udGlmaWNhdGlvbi4gIEluIHZlcnNpb24g MSB0aGlzIG1lYW50IGFsd2F5cyB0dXJuIG9uCi07OyBkZW1hbmQtZHJpdmVuIGZvbnRpZmljYXRp b24uICBJZiB5b3UgcmVhbGx5IHdhbnQgZGVtYW5kLWRyaXZlbiBmb250aWZpY2F0aW9uCi07OyBy ZWdhcmRsZXNzIG9mIGJ1ZmZlciBzaXplLCBzZXQgdGhpcyB2YXJpYWJsZSB0byAwLgotOzsKLTs7 IC0gVGhlIHZhcmlhYmxlIGBsYXp5LWxvY2stc3RlYWx0aC1saW5lcycgY2Fubm90IGhhdmUgYSBu aWwgdmFsdWUuICBJbgotOzsgdmVyc2lvbiAxIHRoaXMgbWVhbnQgdXNlIGB3aW5kb3ctaGVpZ2h0 JyBhcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8KLTs7IGZvbnRpZnkgYXMgYSBzdGVh bHRoIGNodW5rLiAgVGhpcyBtYWtlcyBubyBzZW5zZTsgc3RlYWx0aCBmb250aWZpY2F0aW9uIGlz Ci07OyBvZiBhIGJ1ZmZlciwgbm90IGEgd2luZG93LgotCi07OyBJbXBsZW1lbnRhdGlvbiBkaWZm ZXJlbmNlcyB3aXRoIHZlcnNpb24gMToKLTs7Ci07OyAtIFZlcnNpb24gMSBvZiBsYXp5LWxvY2su ZWwgaXMgYSBiaXQgb2YgYSBoYWNrLiAgVmVyc2lvbiAxIGRlbWFuZC1kcml2ZW4KLTs7IGZvbnRp ZmljYXRpb24sIHRoZSBjb3JlIGZlYXR1cmUgb2YgbGF6eS1sb2NrLmVsLCBpcyBpbXBsZW1lbnRl ZCBieSBwbGFjaW5nIGEKLTs7IGZ1bmN0aW9uIG9uIGBwb3N0LWNvbW1hbmQtaG9vaycuICBUaGlz IGZ1bmN0aW9uIGZvbnRpZmllcyB3aGVyZSBuZWNlc3NhcnksCi07OyBpLmUuLCB3aGVyZSBhIHdp bmRvdyBzY3JvbGwgaGFzIG9jY3VycmVkLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9m Ci07OyBwcm9ibGVtcyB3aXRoIHVzaW5nIGBwb3N0LWNvbW1hbmQtaG9vayc6Ci07OwotOzsgKGEp IEFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBgcG9zdC1jb21tYW5kLWhvb2snIGlzIHJ1biBhZnRlciBl dmVyeSBjb21tYW5kLAotOzsgICAgIGkuZS4sIGZyZXF1ZW50bHkgYW5kIHJlZ2FyZGxlc3Mgb2Yg d2hldGhlciBzY3JvbGxpbmcgaGFzIG9jY3VycmVkLgotOzsgKGIpIFNjcm9sbGluZyBjYW4gb2Nj dXIgZHVyaW5nIGEgY29tbWFuZCwgd2hlbiBgcG9zdC1jb21tYW5kLWhvb2snIGlzIG5vdAotOzsg ICAgIHJ1biwgaS5lLiwgaXQgaXMgbm90IG5lY2Vzc2FyaWx5IHJ1biBhZnRlciBzY3JvbGxpbmcg aGFzIG9jY3VycmVkLgotOzsgKGMpIFdoZW4gYHBvc3QtY29tbWFuZC1ob29rJyBpcyBydW4sIHRo ZXJlIGlzIG5vdGhpbmcgdG8gc3VnZ2VzdCB3aGVyZQotOzsgICAgIHNjcm9sbGluZyBtaWdodCBo YXZlIG9jY3VycmVkLCBpLmUuLCB3aGljaCB3aW5kb3dzIGhhdmUgc2Nyb2xsZWQuCi07OwotOzsg VGh1cyBsYXp5LWxvY2suZWwncyBmdW5jdGlvbiBpcyBjYWxsZWQgYWxtb3N0IGFzIG9mdGVuIGFz IHBvc3NpYmxlLCB1c3VhbGx5Ci07OyB3aGVuIGl0IG5lZWQgbm90IGJlIGNhbGxlZCwgeWV0IGl0 IGlzIG5vdCBhbHdheXMgY2FsbGVkIHdoZW4gaXQgaXMgbmVlZGVkLgotOzsgQWxzbywgbGF6eS1s b2NrLmVsJ3MgZnVuY3Rpb24gbXVzdCBjaGVjayBlYWNoIHdpbmRvdyB0byBzZWUgaWYgYSBzY3Jv bGwgaGFzCi07OyBvY2N1cnJlZCB0aGVyZS4gIFdvcnNlIHN0aWxsLCBsYXp5LWxvY2suZWwncyBm dW5jdGlvbiBtdXN0IGZvbnRpZnkgYSByZWdpb24KLTs7IHR3aWNlIGFzIGxhcmdlIGFzIG5lY2Vz c2FyeSB0byBtYWtlIHN1cmUgdGhlIHdpbmRvdyBpcyBjb21wbGV0ZWx5IGZvbnRpZmllZC4KLTs7 IEJhc2ljYWxseSwgYHBvc3QtY29tbWFuZC1ob29rJyBpcyBjb21wbGV0ZWx5IGluYXBwcm9wcmlh dGUgZm9yIGxhenktbG9jay5lbC4KLTs7Ci07OyBJZGVhbGx5LCB3ZSB3YW50IHRvIGF0dGFjaCBs YXp5LWxvY2suZWwncyBmdW5jdGlvbiB0byBhIGhvb2sgdGhhdCBpcyBydW4KLTs7IG9ubHkgd2hl biBzY3JvbGxpbmcgb2NjdXJzLCBlLmcuLCBgd2luZG93LXN0YXJ0JyBoYXMgY2hhbmdlZCwgYW5k IHRlbGxzIHVzCi07OyBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHdlIG5lZWQsIGkuZS4sIHRoZSB3 aW5kb3cgYW5kIGl0cyBuZXcgYnVmZmVyIHJlZ2lvbi4KLTs7IFJpY2hhcmQgU3RhbGxtYW4gaW1w bGVtZW50ZWQgYSBgd2luZG93LXNjcm9sbC1mdW5jdGlvbnMnIGZvciBFbWFjcyAxOS4zMC4KLTs7 IEZ1bmN0aW9ucyBvbiBpdCBhcmUgcnVuIHdoZW4gYHdpbmRvdy1zdGFydCcgaGFzIGNoYW5nZWQs IGFuZCBhcmUgc3VwcGxpZWQKLTs7IHdpdGggdGhlIHdpbmRvdyBhbmQgdGhlIHdpbmRvdydzIG5l dyBgd2luZG93LXN0YXJ0JyBwb3NpdGlvbi4gIChJdCB3b3VsZCBiZQotOzsgYmV0dGVyIGlmIGl0 IGFsc28gc3VwcGxpZWQgdGhlIHdpbmRvdydzIG5ldyBgd2luZG93LWVuZCcgcG9zaXRpb24sIGJ1 dCB0aGF0Ci07OyBpcyBjYWxjdWxhdGVkIGFzIHBhcnQgb2YgdGhlIHJlZGlzcGxheSBwcm9jZXNz LCBhbmQgdGhlIGZ1bmN0aW9ucyBvbgotOzsgYHdpbmRvdy1zY3JvbGwtZnVuY3Rpb25zJyBhcmUg cnVuIGJlZm9yZSByZWRpc3BsYXkgaGFzIGZpbmlzaGVkLikgIFRodXMsIHRoZQotOzsgaG9vayBk ZWFscyB3aXRoIHRoZSBhYm92ZSBwcm9ibGVtcyAoYSksIChiKSBhbmQgKGMpLgotOzsKLTs7IElm IG9ubHkgbGlmZSB3YXMgdGhhdCBlYXN5LiAgVmVyc2lvbiAyIGRlbWFuZC1kcml2ZW4gZm9udGlm aWNhdGlvbiBpcyBtb3N0bHkKLTs7IGltcGxlbWVudGVkIGJ5IHBsYWNpbmcgYSBmdW5jdGlvbiBv biBgd2luZG93LXNjcm9sbC1mdW5jdGlvbnMnLiAgSG93ZXZlciwKLTs7IG5vdCBhbGwgc2Nyb2xs aW5nIG9jY3VycyB3aGVuIGB3aW5kb3ctc3RhcnQnIGhhcyBjaGFuZ2VkLiAgQSBjaGFuZ2UgaW4K LTs7IHdpbmRvdyBzaXplLCBlLmcuLCB2aWEgQy14IDEsIG9yIGEgc2lnbmlmaWNhbnQgZGVsZXRp b24sIGUuZy4sIG9mIGEgbnVtYmVyCi07OyBvZiBsaW5lcywgY2F1c2VzIHRleHQgcHJldmlvdXNs eSBpbnZpc2libGUgKGkuZS4sIGFmdGVyIGB3aW5kb3ctZW5kJykgdG8KLTs7IGJlY29tZSB2aXNp YmxlIHdpdGhvdXQgY2hhbmdpbmcgYHdpbmRvdy1zdGFydCcuICBBcmd1YWJseSwgdGhlc2UgZXZl bnRzIGFyZQotOzsgbm90IHNjcm9sbGluZyBldmVudHMsIGJ1dCBmb250aWZpY2F0aW9uIG11c3Qg b2NjdXIgZm9yIGxhenktbG9jay5lbCB0byB3b3JrLgotOzsgSG9va3MgYHdpbmRvdy1zaXplLWNo YW5nZS1mdW5jdGlvbnMnIGFuZCBgcmVkaXNwbGF5LWVuZC10cmlnZ2VyLWZ1bmN0aW9ucycKLTs7 IHdlcmUgYWRkZWQgZm9yIHRoZXNlIGNpcmN1bXN0YW5jZXMuCi07OwotOzsgKEJlbiBXaW5nIHRo aW5rcyB0aGVzZSBob29rcyBhcmUgImhvcnJpYmx5IGhvcnJpYmx5IGtsdWRneSIsIGFuZCBpbXBs ZW1lbnRlZAotOzsgYSBgcHJlLWlkbGUtaG9vaycsIGEgYG1vdGhlci1vZi1hbGwtcG9zdC1jb21t YW5kLWhvb2tzJywgZm9yIFhFbWFjcyAxOS4xNC4KLTs7IEhlIHRoZW4gaGFja2VkIHVwIGEgdmVy c2lvbiAxIGxhenktbG9jay5lbCB0byB1c2UgYHByZS1pZGxlLWhvb2snIHJhdGhlcgotOzsgdGhh biBgcG9zdC1jb21tYW5kLWhvb2snLiAgV2hlcmVhcyBmdW5jdGlvbnMgb24gYHBvc3QtY29tbWFu ZC1ob29rJyBhcmUKLTs7IGNhbGxlZCBhbG1vc3QgYXMgb2Z0ZW4gYXMgcG9zc2libGUsIGZ1bmN0 aW9ucyBvbiBgcHJlLWlkbGUtaG9vaycgcmVhbGx5IGFyZQotOzsgY2FsbGVkIGFzIG9mdGVuIGFz IHBvc3NpYmxlLCBldmVuIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFuZCwgb24gc29tZSBzeXN0ZW1z LAotOzsgd2hpbGUgWEVtYWNzIGlzIGlkbGUuICBUaHVzLCB0aGUgaG9vayBkZWFscyB3aXRoIHRo ZSBhYm92ZSBwcm9ibGVtIChiKSwgYnV0Ci07OyB1bmZvcnR1bmF0ZWx5IGl0IG1ha2VzIChhKSB3 b3JzZSBhbmQgZG9lcyBub3QgYWRkcmVzcyAoYykgYXQgYWxsLgotOzsKLTs7IEkgZnJlZWx5IGFk bWl0IHRoYXQgYHJlZGlzcGxheS1lbmQtdHJpZ2dlci1mdW5jdGlvbnMnIGFuZCwgdG8gYSBtdWNo IGxlc3NlcgotOzsgZXh0ZW50LCBgd2luZG93LXNpemUtY2hhbmdlLWZ1bmN0aW9ucycgYXJlIG5v dCBwcmV0dHkuICBIb3dldmVyLCBJIGZlZWwgdGhhdAotOzsgYSBgd2luZG93LXNjcm9sbC1mdW5j dGlvbnMnIGZlYXR1cmUgaXMgY2xlYW5lciB0aGFuIGEgYHByZS1pZGxlLWhvb2snLCBhbmQKLTs7 IHRoZSByZXN1bHQgaXMgZmFzdGVyIGFuZCBzbWFsbGVyLCBsZXNzIGludHJ1c2l2ZSBhbmQgbW9y ZSB0YXJnZXRlZCwgY29kZS4KLTs7IFNpbmNlIGBwcmUtaWRsZS1ob29rJyBpcyBwcmV0dHkgbXVj aCBsaWtlIGBwb3N0LWNvbW1hbmQtaG9vaycsIHRoZXJlIGlzIG5vCi07OyBwb2ludCBpbiBtYWtp bmcgdGhpcyB2ZXJzaW9uIG9mIGxhenktbG9jay5lbCB3b3JrIHdpdGggaXQuICBBbnl3YXksIHRo YXQncwotOzsgTGl0IDMwIG9mIG15IGh1bWJsZSBvcGluaW9uLgotOzsKLTs7IC0gVmVyc2lvbiAx IHN0ZWFsdGggZm9udGlmaWNhdGlvbiBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHBsYWNpbmcgYSBm dW5jdGlvbgotOzsgb24gYHBvc3QtY29tbWFuZC1ob29rJy4gIFRoaXMgZnVuY3Rpb24gd2FpdHMg Zm9yIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWUsCi07OyBhbmQsIGlmIEVtYWNzIHJlbWFpbnMgaWRs ZSwgZm9udGlmaWVzIHdoZXJlIG5lY2Vzc2FyeS4gIEFnYWluLCB0aGVyZSBhcmUgYQotOzsgbnVt YmVyIG9mIHByb2JsZW1zIHdpdGggdXNpbmcgYHBvc3QtY29tbWFuZC1ob29rJzoKLTs7Ci07OyAo YSkgRnVuY3Rpb25zIG9uIGBwb3N0LWNvbW1hbmQtaG9vaycgYXJlIHJ1biBzZXF1ZW50aWFsbHks IHNvIHRoaXMgZnVuY3Rpb24KLTs7ICAgICBjYW4gaW50ZXJmZXJlIHdpdGggb3RoZXIgZnVuY3Rp b25zIG9uIHRoZSBob29rLCBhbmQgdmljZSB2ZXJzYS4KLTs7IChiKSBUaGlzIGZ1bmN0aW9uIHdh aXRzIGZvciBhIGdpdmVuIGFtb3VudCBvZiB0aW1lLCBzbyBpdCBjYW4gaW50ZXJmZXJlIHdpdGgK LTs7ICAgICB2YXJpb3VzIGZlYXR1cmVzIHRoYXQgYXJlIGRlYWx0IHdpdGggYnkgRW1hY3MgYWZ0 ZXIgYSBjb21tYW5kLCBlLmcuLAotOzsgICAgIHJlZ2lvbiBoaWdobGlnaHRpbmcsIGFzeW5jaHJv bm91cyB1cGRhdGluZyBhbmQga2V5c3Ryb2tlIGVjaG9pbmcuCi07OyAoYykgRm9udGlmaWNhdGlv biBtYXkgYmUgcmVxdWlyZWQgZHVyaW5nIGEgY29tbWFuZCwgd2hlbiBgcG9zdC1jb21tYW5kLWhv b2snCi07OyAgICAgaXMgbm90IHJ1bi4gIChWZXJzaW9uIDIgZGVmZXJyZWQgZm9udGlmaWNhdGlv biBvbmx5LikKLTs7Ci07OyBBZ2FpbiwgYHBvc3QtY29tbWFuZC1ob29rJyBpcyBjb21wbGV0ZWx5 IGluYXBwcm9wcmlhdGUgZm9yIGxhenktbG9jay5lbC4KLTs7IFJpY2hhcmQgU3RhbGxtYW4gYW5k IE1vcnRlbiBXZWxpbmRlciBpbXBsZW1lbnRlZCBpbnRlcm5hbCBUaW1lcnMgYW5kIElkbGUKLTs7 IFRpbWVycyBmb3IgRW1hY3MgMTkuMzEuICBGdW5jdGlvbnMgY2FuIGJlIHJ1biBpbmRlcGVuZGVu dGx5IGF0IGdpdmVuIHRpbWVzCi07OyBvciBhZnRlciBnaXZlbiBhbW91bnRzIG9mIGlkbGUgdGlt ZS4gIFRodXMsIHRoZSBmZWF0dXJlIGRlYWxzIHdpdGggdGhlIGFib3ZlCi07OyBwcm9ibGVtcyAo YSksIChiKSBhbmQgKGMpLiAgVmVyc2lvbiAyIGRlZmVycmFsIGFuZCBzdGVhbHRoIGFyZSBpbXBs ZW1lbnRlZAotOzsgYnkgZnVuY3Rpb25zIG9uIElkbGUgVGltZXJzLiAgKEEgZnVuY3Rpb24gb24g WEVtYWNzJyBgcHJlLWlkbGUtaG9vaycgaXMKLTs7IHNpbWlsYXIgdG8gYW4gRW1hY3MgSWRsZSBU aW1lciBmdW5jdGlvbiB3aXRoIGEgZml4ZWQgemVybyBzZWNvbmQgdGltZW91dC4pCi0KLTs7IC0g VmVyc2lvbiAxIGhhcyB0aGUgZm9sbG93aW5nIHByb2JsZW1zIChyZWxhdGl2ZSB0byB2ZXJzaW9u IDIpOgotOzsKLTs7IChhKSBJdCBpcyBzbG93IHdoZW4gaXQgZG9lcyBpdHMgam9iLgotOzsgKGIp IEl0IGRvZXMgbm90IGFsd2F5cyBkbyBpdHMgam9iIHdoZW4gaXQgc2hvdWxkLgotOzsgKGMpIEl0 IHNsb3dzIGFsbCBpbnRlcmFjdGlvbiAod2hlbiBpdCBkb2Vzbid0IG5lZWQgdG8gZG8gaXRzIGpv YikuCi07OyAoZCkgSXQgaW50ZXJmZXJlcyB3aXRoIG90aGVyIHBhY2thZ2UgZnVuY3Rpb25zIG9u IGBwb3N0LWNvbW1hbmQtaG9vaycuCi07OyAoZSkgSXQgaW50ZXJmZXJlcyB3aXRoIEVtYWNzIHRo aW5ncyB3aXRoaW4gdGhlIHJlYWQtZXZhbCBsb29wLgotOzsKLTs7IEJlbidzIGhhY2tlZC11cCBs YXp5LWxvY2suZWwgMS4xNCBhbG1vc3Qgc29sdmVkIChiKSBidXQgbWFkZSAoYykgd29yc2UuCi07 OwotOzsgLSBWZXJzaW9uIDIgaGFzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBmZWF0dXJlcyAo cmVsYXRpdmUgdG8gdmVyc2lvbiAxKToKLTs7Ci07OyAoYSkgSXQgY2FuIGRlZmVyIGZvbnRpZmlj YXRpb24gKGJvdGggb24tdGhlLWZseSBhbmQgb24tc2Nyb2xsaW5nKS4KLTs7IChiKSBJdCBjYW4g Zm9udGlmeSBjb250ZXh0dWFsbHkgKHN5bnRhY3RpY2FsbHkgdHJ1ZSBvbi10aGUtZmx5KS4KLQot OzsgQ2F2ZWF0czoKLTs7Ci07OyBMYXp5IExvY2sgbW9kZSBkb2VzIG5vdCB3b3JrIGVmZmljaWVu dGx5IHdpdGggT3V0bGluZSBtb2RlLgotOzsgVGhpcyBpcyBiZWNhdXNlIHdoZW4gaW4gT3V0bGlu ZSBtb2RlLCBhbHRob3VnaCB0ZXh0IG1heSBiZSBub3QgdmlzaWJsZSB0bwotOzsgeW91IGluIHRo ZSB3aW5kb3csIHRoZSB0ZXh0IGlzIHZpc2libGUgdG8gRW1hY3MgTGlzcCBjb2RlIChub3Qgc3Vy cHJpc2luZ2x5KQotOzsgYW5kIExhenkgTG9jayBmb250aWZpZXMgaXQgbWVyY2lsZXNzbHkuICBN YXliZSBpdCB3aWxsIGJlIGZpeGVkIG9uZSBkYXkuCi07OwotOzsgQmVjYXVzZSBidWZmZXIgdGV4 dCBpcyBub3QgbmVjZXNzYXJpbHkgZm9udGlmaWVkLCBvdGhlciBwYWNrYWdlcyB0aGF0IGV4cGVj dAotOzsgYnVmZmVyIHRleHQgdG8gYmUgZm9udGlmaWVkIGluIEZvbnQgTG9jayBtb2RlIGVpdGhl ciBtaWdodCBub3Qgd29yayBhcwotOzsgZXhwZWN0ZWQsIG9yIG1pZ2h0IG5vdCBkaXNwbGF5IGJ1 ZmZlciB0ZXh0IGFzIGV4cGVjdGVkLiAgQW4gZXhhbXBsZSBvZiB0aGUKLTs7IGxhdHRlciBpcyBg b2NjdXInLCB3aGljaCBjb3BpZXMgbGluZXMgb2YgYnVmZmVyIHRleHQgaW50byBhbm90aGVyIGJ1 ZmZlci4KLTs7Ci07OyBJbiBFbWFjcyAxOS4zMCwgTGF6eSBMb2NrIG1vZGUgZG9lcyBub3QgZW5z dXJlIHRoYXQgYW4gZXhpc3RpbmcgYnVmZmVyIGlzCi07OyBmb250aWZpZWQgaWYgaXQgaXMgbWFk ZSB2aXNpYmxlIHZpYSBhIG1pbmlidWZmZXItbGVzcyBjb21tYW5kIHRoYXQgcmVwbGFjZXMKLTs7 IGFuIGV4aXN0aW5nIHdpbmRvdydzIGJ1ZmZlciAoZS5nLiwgdmlhIHRoZSBCdWZmZXJzIG1lbnUp LiAgVXBncmFkZSEKLTs7Ci07OyBJbiBFbWFjcyAxOS4zMCwgTGF6eSBMb2NrIG1vZGUgZG9lcyBu b3Qgd29yayB3ZWxsIHdpdGggVHJhbnNpZW50IE1hcmsgbW9kZQotOzsgb3IgbW9kZXMgYmFzZWQg b24gQ29taW50IG1vZGUgKGUuZy4sIFNoZWxsIG1vZGUpLCBhbmQgYWxzbyBpbnRlcmZlcmVzIHdp dGgKLTs7IHRoZSBlY2hvaW5nIG9mIGtleXN0cm9rZXMgaW4gdGhlIG1pbmlidWZmZXIuICBUaGlz IGlzIGJlY2F1c2Ugb2YgdGhlIHdheQotOzsgZGVmZXJyYWwgYW5kIHN0ZWFsdGggaGF2ZSB0byBi ZSBpbXBsZW1lbnRlZCBmb3IgRW1hY3MgMTkuMzAuICBVcGdyYWRlIQotOzsKLTs7IEN1cnJlbnRs eSBYRW1hY3MgZG9lcyBub3QgaGF2ZSB0aGUgZmVhdHVyZXMgdG8gc3VwcG9ydCB0aGlzIHZlcnNp b24gb2YKLTs7IGxhenktbG9jay5lbC4gIE1heWJlIGl0IHdpbGwgb25lIGRheS4KLQwKLTs7IEhp c3Rvcnk6Ci07OwotOzsgMS4xNS0tMi4wMDoKLTs7IC0gUmV3cml0ZSBmb3IgRW1hY3MgMTkuMzAg YW5kIHRoZSBmZWF0dXJlcyBybXMgYWRkZWQgdG8gc3VwcG9ydCBsYXp5LWxvY2suZWwKLTs7ICAg c28gdGhhdCBpdCBjb3VsZCB3b3JrIGNvcnJlY3RseSBhbmQgZWZmaWNpZW50bHkuCi07OyAtIE1h bnkgdGhhbmtzIHRvIHRob3NlIHdobyByZXBvcnRlZCBidWdzLCBmaXhlZCBidWdzLCBtYWRlIHN1 Z2dlc3Rpb25zIG9yCi07OyAgIG90aGVyd2lzZSBjb250cmlidXRlZCBpbiB0aGUgdmVyc2lvbiAx IGN5Y2xlOyBKYXJpIEFhbHRvLCBLZXZpbiBCcm9hZGV5LAotOzsgICBVbHJpayBEaWNrb3csIEJp bGwgRHVidXF1ZSwgQm9iIEdsaWNrc3RlaW4sIEJvcmlzIEdvbGRvd3NreSwKLTs7ICAgSm9uYXMg SmFybmVzdHJvbSwgRGF2aWQgS2FyciwgTWljaGFlbCBLaWZlciwgRXJpayBOYWdndW0sIFJpY2sg U2xhZGtleSwKLTs7ICAgSmltIFRob21wc29uLCBCZW4gV2luZywgSWx5YSBaYWtoYXJldmljaCwg YW5kIFJpY2hhcmQgU3RhbGxtYW4uCi07OyAyLjAwLS0yLjAxOgotOzsgLSBNYWRlIGBsYXp5LWxv Y2stZm9udGlmeS1hZnRlci1jb21tYW5kJyBhbHdheXMgYHNpdC1mb3InIGFuZCBzbyByZWRpc3Bs YXkKLTs7IC0gVXNlIGBidWZmZXItbmFtZScgbm90IGBidWZmZXItbGl2ZS1wJyAoQmlsbCBEdWJ1 cXVlIGhpbnQpCi07OyAtIE1hZGUgYGxhenktbG9jay1pbnN0YWxsJyBkbyBgYWRkLXRvLWxpc3Qn IG5vdCBgc2V0cScgb2YgYGN1cnJlbnQtYnVmZmVyJwotOzsgLSBNYWRlIGBsYXp5LWxvY2stZm9u dGlmeS1hZnRlci1pbnN0YWxsJyBsb29wIG92ZXIgYnVmZmVyIGxpc3QKLTs7IC0gTWFkZSBgbGF6 eS1sb2NrLWFycmFuZ2UtYmVmb3JlLWNoYW5nZScgdG8gYXJyYW5nZSBgd2luZG93LWVuZCcgdHJp Z2dlcmluZwotOzsgLSBNYWRlIGBsYXp5LWxvY2stbGV0LWJ1ZmZlci1zdGF0ZScgd3JhcCBib3Ro IGBiZWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucycKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZvbnRpZnkt cmVnaW9uJyBkbyBgY29uZGl0aW9uLWNhc2UnIChIeW1hbiBSb3NlbiByZXBvcnQpCi07OyAyLjAx LS0yLjAyOgotOzsgLSBVc2UgYGJ1ZmZlci1saXZlLXAnIGFzIGBidWZmZXItbmFtZScgY2FuIGJh cmYgKFJpY2hhcmQgU3RhbnRvbiByZXBvcnQpCi07OyAtIE1hZGUgYGxhenktbG9jay1pbnN0YWxs JyBzZXQgYGZvbnQtbG9jay1mb250aWZpZWQnIChLZXZpbiBEYXZpZHNvbiByZXBvcnQpCi07OyAt IE1hZGUgYGxhenktbG9jay1pbnN0YWxsJyBhZGQgaG9va3Mgb25seSBpZiBuZWVkZWQKLTs7IC0g TWFkZSBgbGF6eS1sb2NrLXVuc3RhbGwnIGFkZCBgZm9udC1sb2NrLWFmdGVyLWNoYW5nZS1mdW5j dGlvbicgaWYgbmVlZGVkCi07OyAyLjAyLS0yLjAzOgotOzsgLSBNYWRlIGBsYXp5LWxvY2stZm9u dGlmeS1yZWdpb24nIGRvIGBjb25kaXRpb24tY2FzZScgZm9yIGBxdWl0JyB0b28KLTs7IC0gTWFk ZSBgbGF6eS1sb2NrLW1vZGUnIHJlc3BlY3QgdGhlIHZhbHVlIG9mIGBmb250LWxvY2staW5oaWJp dC10aGluZy1sb2NrJwotOzsgLSBBZGRlZCBgbGF6eS1sb2NrLWFmdGVyLXVuZm9udGlmeS1idWZm ZXInCi07OyAtIFJlbW92ZWQgYGxhenktbG9jay1mb250aWZ5LWFmdGVyLWluc3RhbGwnIGhhY2sK LTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsJyBub3QgYHNldC1idWZm ZXInIHRvIGB3aW5kb3ctYnVmZmVyJwotOzsgLSBNYWRlIGBsYXp5LWxvY2stZm9udGlmeS1hZnRl ci10cmlnZ2VyJyBub3QgYHNldC1idWZmZXInIHRvIGB3aW5kb3ctYnVmZmVyJwotOzsgLSBNYWRl IGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci1pZGxlJyBiZSBpbnRlcnJ1cHRpYmxlIChTY290dCBC dXJzb24gaGludCkKLTs7IDIuMDMtLTIuMDQ6Ci07OyAtIFJld3JpdGUgZm9yIEVtYWNzIDE5LjMx IGlkbGUgdGltZXJzCi07OyAtIFJlbmFtZWQgYGJ1ZmZlci13aW5kb3dzJyB0byBgZ2V0LWJ1ZmZl ci13aW5kb3ctbGlzdCcKLTs7IC0gUmVtb3ZlZCBgYnVmZmVyLWxpdmUtcCcKLTs7IC0gTWFkZSBg bGF6eS1sb2NrLWRlZmVyLWFmdGVyLWNoYW5nZScgYWx3YXlzIHNhdmUgYGN1cnJlbnQtYnVmZmVy JwotOzsgLSBNYWRlIGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci1kZWZlcicganVzdCBwcm9jZXNz IGJ1ZmZlcnMKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLWluc3RhbGwtaG9va3MnIGFkZCBob29rcyBj b3JyZWN0bHkgKEtldmluIEJyb2FkZXkgcmVwb3J0KQotOzsgLSBNYWRlIGBsYXp5LWxvY2staW5z dGFsbCcgY29wZSBpZiBgbGF6eS1sb2NrLWRlZmVyLXRpbWUnIGlzIGEgbGlzdAotOzsgMi4wNC0t Mi4wNToKLTs7IC0gUmV3cml0ZSBmb3IgQ29tbW9uIExpc3AgbWFjcm9zCi07OyAtIEFkZGVkIGBk by13aGlsZScgbWFjcm8KLTs7IC0gUmVuYW1lZCBgbGF6eS1sb2NrLWxldC1idWZmZXItc3RhdGUn IG1hY3JvIHRvIGBzYXZlLWJ1ZmZlci1zdGF0ZScKLTs7IC0gUmV0dXJuZWQgYGxhenktbG9jay1m b250aWZ5LWFmdGVyLWluc3RhbGwnIGhhY2sgKERhcnJlbiBIYWxsIGhpbnQpCi07OyAtIEFkZGVk IGBsYXp5LWxvY2stZGVmZXItb24tc2Nyb2xsaW5nJyBmdW5jdGlvbmFsaXR5IChTY290dCBCeWVy IGhpbnQpCi07OyAtIE1hZGUgYGxhenktbG9jay1tb2RlJyB3cmFwIGBmb250LWxvY2stc3VwcG9y dC1tb2RlJwotOzsgMi4wNS0tMi4wNjoKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0 ZXItZGVmZXInIHN3YXAgY29ycmVjdGx5IChTY290dCBCeWVyIHJlcG9ydCkKLTs7IDIuMDYtLTIu MDc6Ci07OyAtIEFkZGVkIGBsYXp5LWxvY2stc3RlYWx0aC1sb2FkJyBmdW5jdGlvbmFsaXR5IChS b2IgSG9vZnQgaGludCkKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLXVuc3RhbGwnIGNhbGwgYGxhenkt bG9jay1mb250aWZ5LXJlZ2lvbicgaWYgbmVlZGVkCi07OyAtIE1hZGUgYGxhenktbG9jay1tb2Rl JyBjYWxsIGBsYXp5LWxvY2stdW5zdGFsbCcgb25seSBpZiBuZWVkZWQKLTs7IC0gTWFkZSBgbGF6 eS1sb2NrLWRlZmVyLWFmdGVyLXNjcm9sbCcgZG8gYHNldC13aW5kb3ctcmVkaXNwbGF5LWVuZC10 cmlnZ2VyJwotOzsgLSBBZGRlZCBgbGF6eS1sb2NrLWRlZmVyLWNvbnRleHR1YWxseScgZnVuY3Rp b25hbGl0eQotOzsgLSBBZGRlZCBgbGF6eS1sb2NrLWRlZmVyLW9uLXRoZS1mbHknIGZyb20gYGxh enktbG9jay1kZWZlci10aW1lJwotOzsgLSBSZW5hbWVkIGBsYXp5LWxvY2stZGVmZXItZHJpdmVu JyB0byBgbGF6eS1sb2NrLWRlZmVyLW9uLXNjcm9sbGluZycKLTs7IC0gUmVtb3ZlZCBgbGF6eS1s b2NrLXN1Ym1pdC1idWctcmVwb3J0JyBhbmQgYmFkZSBmYXJld2VsbAotOzsgMi4wNy0tMi4wODoK LTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZvbnRpZnktY29uc2VydmF0aXZlbHknIGZvbnRpZnkgYXJv dW5kIGB3aW5kb3ctcG9pbnQnCi07OyAtIE1hZGUgYHNhdmUtYnVmZmVyLXN0YXRlJyB3cmFwIGBp bmhpYml0LXBvaW50LW1vdGlvbi1ob29rcycKLTs7IC0gQWRkZWQgQ3VzdG9tIHN1cHBvcnQKLTs7 IDIuMDgtLTIuMDk6Ci07OyAtIFJlbW92ZWQgYGJ5dGUtKicgdmFyaWFibGVzIGZyb20gYGV2YWwt d2hlbi1jb21waWxlJyAoRXJpayBOYWdndW0gaGludCkKLTs7IC0gTWFkZSB2YXJpb3VzIHdyYXBw aW5nIGBpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcycgKFZpbmljaXVzIExhdG9ycmUgaGludCkK LTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItaWRsZScgd3JhcCBgbWluaWJ1ZmZl ci1hdXRvLXJhaXNlJwotOzsgLSBNYWRlIGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci1kZWZlcicg cGFyYW5vaWQgYWJvdXQgZGVmZXJyZWQgYnVmZmVycwotOzsgMi4wOS0tMi4xMDoKLTs7IC0gVXNl IGB3aW5kb3ctZW5kJyBVUERBVEUgYXJnIGZvciBFbWFjcyAyMC40IGFuZCBsYXRlci4KLTs7IC0g TWFkZSBkZWZlcnJhbCBgd2lkZW4nIGJlZm9yZSB1bmZvbnRpZnlpbmcgKERhbiBOaWNvbGFlc2N1 IHJlcG9ydCkKLTs7IC0gVXNlIGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci12aXNhZ2UnIGZvciBo aWRlc2hvdy5lbCAoRGFuIE5pY29sYWVzY3UgaGludCkKLTs7IC0gVXNlIGBvdGhlcicgd2lkZ2V0 IHdoZXJlIHBvc3NpYmxlIChBbmRyZWFzIFNjaHdhYiBmaXgpCi07OyAyLjEwLS0yLjExOgotOzsg LSBVc2VkIGB3aXRoLXRlbXAtbWVzc2FnZScgd2hlcmUgcG9zc2libGUgdG8gbWFrZSBtZXNzYWdl cyB0ZW1wb3JhcnkuCi0MCi07OzsgQ29kZToKLQotKHJlcXVpcmUgJ2ZvbnQtbG9jaykKLShldmFs LXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wtbGliKSkKLQotKGV2YWwtd2hlbi1jb21waWxlCi0g OzsKLSA7OyBXZSB1c2UgdGhpcyBmb3IgY2xhcml0eSBhbmQgc3BlZWQuICBOYXVnaHR5IGJ1dCBu aWNlLgotIChkZWZtYWNybyBkby13aGlsZSAodGVzdCAmcmVzdCBib2R5KQotICAgIihkby13aGls ZSBURVNUIEJPRFkuLi4pOiBldmFsIEJPRFkuLi4gYW5kIHJlcGVhdCBpZiBURVNUIHlpZWxkcyBu b24tbmlsLgotVGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiBpcyB0aHVzIEJPRFksIFRFU1QsIEJPRFks IFRFU1QgYW5kIHNvIG9uCi11bnRpbCBURVNUIHJldHVybnMgbmlsLiIKLSAgIChkZWNsYXJlIChp bmRlbnQgMSkgKGRlYnVnIHQpKQotICAgYCh3aGlsZSAocHJvZ24gLEBib2R5ICx0ZXN0KSkpKQot Ci0oZGVmZ3JvdXAgbGF6eS1sb2NrIG5pbAotICAiRm9udCBMb2NrIHN1cHBvcnQgbW9kZSB0byBm b250aWZ5IGxhemlseS4iCi0gIDpncm91cCAnZm9udC1sb2NrKQotCi0oZGVmdmFyIGxhenktbG9j ay1tb2RlIG5pbCkJCQk7IFdoZXRoZXIgd2UgYXJlIHR1cm5lZCBvbi4KLShkZWZ2YXIgbGF6eS1s b2NrLWJ1ZmZlcnMgbmlsKQkJCTsgRm9yIGRlZmVycmFsLgotKGRlZnZhciBsYXp5LWxvY2stdGlt ZXJzIChjb25zIG5pbCBuaWwpKQk7IEZvciBkZWZlcnJhbCBhbmQgc3RlYWx0aC4KLQwKLTs7IFVz ZXIgVmFyaWFibGVzOgotCi0oZGVmY3VzdG9tIGxhenktbG9jay1taW5pbXVtLXNpemUgMjU2MDAK LSAgIk1pbmltdW0gc2l6ZSBvZiBhIGJ1ZmZlciBmb3IgZGVtYW5kLWRyaXZlbiBmb250aWZpY2F0 aW9uLgotT24tZGVtYW5kIGZvbnRpZmljYXRpb24gb2NjdXJzIGlmIHRoZSBidWZmZXIgc2l6ZSBp cyBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZS4KLUlmIG5pbCwgbWVhbnMgZGVtYW5kLWRyaXZlbiBm b250aWZpY2F0aW9uIGlzIG5ldmVyIHBlcmZvcm1lZC4KLUlmIGEgbGlzdCwgZWFjaCBlbGVtZW50 IHNob3VsZCBiZSBhIGNvbnMgcGFpciBvZiB0aGUgZm9ybSAoTUFKT1ItTU9ERSAuIFNJWkUpLAot d2hlcmUgTUFKT1ItTU9ERSBpcyBhIHN5bWJvbCBvciB0IChtZWFuaW5nIHRoZSBkZWZhdWx0KS4g IEZvciBleGFtcGxlOgotICgoYy1tb2RlIC4gMjU2MDApIChjKystbW9kZSAuIDI1NjAwKSAocm1h aWwtbW9kZSAuIDEwNDg1NzYpKQotbWVhbnMgdGhhdCB0aGUgbWluaW11bSBzaXplIGlzIDI1SyBm b3IgYnVmZmVycyBpbiBDIG9yIEMrKyBtb2Rlcywgb25lIG1lZ2FieXRlCi1mb3IgYnVmZmVycyBp biBSbWFpbCBtb2RlLCBhbmQgc2l6ZSBpcyBpcnJlbGV2YW50IG90aGVyd2lzZS4KLQotVGhlIHZh bHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVuIExhenkgTG9jayBtb2RlIGlzIHR1cm5l ZCBvbi4iCi0gIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJub25lIiBuaWwpCi0JCSAoaW50 ZWdlciA6dGFnICJzaXplIikKLQkJIChyZXBlYXQgOm1lbnUtdGFnICJtb2RlIHNwZWNpZmljIiA6 dGFnICJtb2RlIHNwZWNpZmljIgotCQkJIDp2YWx1ZSAoKHQgLiBuaWwpKQotCQkJIChjb25zIDp0 YWcgIkluc3RhbmNlIgotCQkJICAgICAgIChyYWRpbyA6dGFnICJNb2RlIgotCQkJCSAgICAgIChj b25zdCA6dGFnICJhbGwiIHQpCi0JCQkJICAgICAgKHN5bWJvbCA6dGFnICJuYW1lIikpCi0JCQkg ICAgICAgKHJhZGlvIDp0YWcgIlNpemUiCi0JCQkJICAgICAgKGNvbnN0IDp0YWcgIm5vbmUiIG5p bCkKLQkJCQkgICAgICAoaW50ZWdlciA6dGFnICJzaXplIikpKSkpKQotCi0oZGVmY3VzdG9tIGxh enktbG9jay1kZWZlci1vbi10aGUtZmx5IHQKLSAgIklmIG5vbi1uaWwsIG1lYW5zIGZvbnRpZmlj YXRpb24gYWZ0ZXIgYSBjaGFuZ2Ugc2hvdWxkIGJlIGRlZmVycmVkLgotSWYgbmlsLCBtZWFucyBv bi10aGUtZmx5IGZvbnRpZmljYXRpb24gaXMgcGVyZm9ybWVkLiAgVGhpcyBtZWFucyB3aGVuIGNo YW5nZXMKLW9jY3VyIGluIHRoZSBidWZmZXIsIHRob3NlIGFyZWFzIGFyZSBpbW1lZGlhdGVseSBm b250aWZpZWQuCi1JZiBhIGxpc3QsIGl0IHNob3VsZCBiZSBhIGxpc3Qgb2YgYG1ham9yLW1vZGUn IHN5bWJvbCBuYW1lcyBmb3Igd2hpY2ggZGVmZXJyZWQKLWZvbnRpZmljYXRpb24gc2hvdWxkIG9j Y3VyLiAgVGhlIHNlbnNlIG9mIHRoZSBsaXN0IGlzIG5lZ2F0ZWQgaWYgaXQgYmVnaW5zIHdpdGgK LWBub3QnLiAgRm9yIGV4YW1wbGU6Ci0gKGMtbW9kZSBjKystbW9kZSkKLW1lYW5zIHRoYXQgb24t dGhlLWZseSBmb250aWZpY2F0aW9uIGlzIGRlZmVycmVkIGZvciBidWZmZXJzIGluIEMgYW5kIEMr KyBtb2Rlcwotb25seSwgYW5kIGRlZmVycmFsIGRvZXMgbm90IG9jY3VyIG90aGVyd2lzZS4KLQot VGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVuIExhenkgTG9jayBtb2RlIGlz IHR1cm5lZCBvbi4iCi0gIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJuZXZlciIgbmlsKQot CQkgKGNvbnN0IDp0YWcgImFsd2F5cyIgdCkKLQkJIChzZXQgOm1lbnUtdGFnICJtb2RlIHNwZWNp ZmljIiA6dGFnICJtb2RlcyIKLQkJICAgICAgOnZhbHVlIChub3QpCi0JCSAgICAgIChjb25zdCA6 dGFnICJFeGNlcHQiIG5vdCkKLQkJICAgICAgKHJlcGVhdCA6aW5saW5lIHQgKHN5bWJvbCA6dGFn ICJtb2RlIikpKSkpCi0KLShkZWZjdXN0b20gbGF6eS1sb2NrLWRlZmVyLW9uLXNjcm9sbGluZyBu aWwKLSAgIklmIG5vbi1uaWwsIG1lYW5zIGZvbnRpZmljYXRpb24gYWZ0ZXIgYSBzY3JvbGwgc2hv dWxkIGJlIGRlZmVycmVkLgotSWYgbmlsLCBtZWFucyBkZW1hbmQtZHJpdmVuIGZvbnRpZmljYXRp b24gaXMgcGVyZm9ybWVkLiAgVGhpcyBtZWFucyB3aGVuCi1zY3JvbGxpbmcgaW50byB1bmZvbnRp ZmllZCBhcmVhcyBvZiB0aGUgYnVmZmVyLCB0aG9zZSBhcmVhcyBhcmUgaW1tZWRpYXRlbHkKLWZv bnRpZmllZC4gIFRodXMgc2Nyb2xsaW5nIG5ldmVyIHByZXNlbnRzIHVuZm9udGlmaWVkIGFyZWFz LiAgSG93ZXZlciwgc2luY2UKLWZvbnRpZmljYXRpb24gb2NjdXJzIGR1cmluZyBzY3JvbGxpbmcs IHNjcm9sbGluZyBtYXkgYmUgc2xvdy4KLUlmIHQsIG1lYW5zIGRlZmVyLWRyaXZlbiBmb250aWZp Y2F0aW9uIGlzIHBlcmZvcm1lZC4gIFRoaXMgbWVhbnMgZm9udGlmaWNhdGlvbgotb2YgdGhvc2Ug YXJlYXMgaXMgZGVmZXJyZWQuICBUaHVzIHNjcm9sbGluZyBtYXkgcHJlc2VudCBtb21lbnRhcmls eSB1bmZvbnRpZmllZAotYXJlYXMuICBIb3dldmVyLCBzaW5jZSBmb250aWZpY2F0aW9uIGRvZXMg bm90IG9jY3VyIGR1cmluZyBzY3JvbGxpbmcsIHNjcm9sbGluZwotd2lsbCBiZSBmYXN0ZXIgdGhh biBkZW1hbmQtZHJpdmVuIGZvbnRpZmljYXRpb24uCi1JZiBhbnkgb3RoZXIgdmFsdWUsIGUuZy4s IGBldmVudHVhbGx5JywgbWVhbnMgZGVtYW5kLWRyaXZlbiBmb250aWZpY2F0aW9uIGlzCi1wZXJm b3JtZWQgdW50aWwgdGhlIGJ1ZmZlciBpcyBmb250aWZpZWQsIHRoZW4gYnVmZmVyIGZvbnRpZmlj YXRpb24gYmVjb21lcwotZGVmZXItZHJpdmVuLiAgVGh1cyBzY3JvbGxpbmcgbmV2ZXIgcHJlc2Vu dHMgdW5mb250aWZpZWQgYXJlYXMgdW50aWwgdGhlIGJ1ZmZlcgotaXMgZmlyc3QgZm9udGlmaWVk LCBhZnRlciB3aGljaCBzdWJzZXF1ZW50IHNjcm9sbGluZyBtYXkgcHJlc2VudCBmdXR1cmUgYnVm ZmVyCi1pbnNlcnRpb25zIG1vbWVudGFyaWx5IHVuZm9udGlmaWVkLiAgSG93ZXZlciwgc2luY2Ug Zm9udGlmaWNhdGlvbiBkb2VzIG5vdAotb2NjdXIgZHVyaW5nIHNjcm9sbGluZyBhZnRlciB0aGUg YnVmZmVyIGlzIGZpcnN0IGZvbnRpZmllZCwgc2Nyb2xsaW5nIHdpbGwKLWJlY29tZSBmYXN0ZXIu ICAoQnV0LCBzaW5jZSBjb250ZXh0dWFsIGNoYW5nZXMgY29udGludWFsbHkgb2NjdXIsIHN1Y2gg YSB2YWx1ZQotbWFrZXMgbGl0dGxlIHNlbnNlIGlmIGBsYXp5LWxvY2stZGVmZXItY29udGV4dHVh bGx5JyBpcyBub24tbmlsLikKLQotVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB3 aGVuIExhenkgTG9jayBtb2RlIGlzIHR1cm5lZCBvbi4iCi0gIDp0eXBlICcoY2hvaWNlIChjb25z dCA6dGFnICJuZXZlciIgbmlsKQotCQkgKGNvbnN0IDp0YWcgImFsd2F5cyIgdCkKLQkJIChvdGhl ciA6dGFnICJldmVudHVhbGx5IiBldmVudHVhbGx5KSkpCi0KLShkZWZjdXN0b20gbGF6eS1sb2Nr LWRlZmVyLWNvbnRleHR1YWxseSAnc3ludGF4LWRyaXZlbgotICAiSWYgbm9uLW5pbCwgbWVhbnMg ZGVmZXJyZWQgZm9udGlmaWNhdGlvbiBzaG91bGQgYmUgc3ludGFjdGljYWxseSB0cnVlLgotSWYg bmlsLCBtZWFucyBkZWZlcnJlZCBmb250aWZpY2F0aW9uIG9jY3VycyBvbmx5IG9uIHRob3NlIGxp bmVzIG1vZGlmaWVkLiAgVGhpcwotbWVhbnMgd2hlcmUgbW9kaWZpY2F0aW9uIG9uIGEgbGluZSBj YXVzZXMgc3ludGFjdGljIGNoYW5nZSBvbiBzdWJzZXF1ZW50IGxpbmVzLAotdGhvc2Ugc3Vic2Vx dWVudCBsaW5lcyBhcmUgbm90IHJlZm9udGlmaWVkIHRvIHJlZmxlY3QgdGhlaXIgbmV3IGNvbnRl eHQuCi1JZiB0LCBtZWFucyBkZWZlcnJlZCBmb250aWZpY2F0aW9uIG9jY3VycyBvbiB0aG9zZSBs aW5lcyBtb2RpZmllZCBhbmQgYWxsCi1zdWJzZXF1ZW50IGxpbmVzLiAgVGhpcyBtZWFucyB0aG9z ZSBzdWJzZXF1ZW50IGxpbmVzIGFyZSByZWZvbnRpZmllZCB0byByZWZsZWN0Ci10aGVpciBuZXcg c3ludGFjdGljIGNvbnRleHQsIGVpdGhlciBpbW1lZGlhdGVseSBvciB3aGVuIHNjcm9sbGluZyBp bnRvIHRoZW0uCi1JZiBhbnkgb3RoZXIgdmFsdWUsIGUuZy4sIGBzeW50YXgtZHJpdmVuJywgbWVh bnMgZGVmZXJyZWQgc3ludGFjdGljYWxseSB0cnVlCi1mb250aWZpY2F0aW9uIG9jY3VycyBvbmx5 IGlmIHN5bnRhY3RpYyBmb250aWZpY2F0aW9uIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUKLWJ1ZmZl ciBtb2RlJ3Mgc3ludGF4IHRhYmxlLCBpLmUuLCBvbmx5IGlmIGBmb250LWxvY2sta2V5d29yZHMt b25seScgaXMgbmlsLgotCi1UaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdoZW4g TGF6eSBMb2NrIG1vZGUgaXMgdHVybmVkIG9uLiIKLSAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0 YWcgIm5ldmVyIiBuaWwpCi0JCSAoY29uc3QgOnRhZyAiYWx3YXlzIiB0KQotCQkgKG90aGVyIDp0 YWcgInN5bnRheC1kcml2ZW4iIHN5bnRheC1kcml2ZW4pKSkKLQotKGRlZmN1c3RvbSBsYXp5LWxv Y2stZGVmZXItdGltZSAwLjI1Ci0gICJUaW1lIGluIHNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIGJl Z2lubmluZyBkZWZlcnJlZCBmb250aWZpY2F0aW9uLgotRGVmZXJyZWQgZm9udGlmaWNhdGlvbiBv Y2N1cnMgaWYgdGhlcmUgaXMgbm8gaW5wdXQgd2l0aGluIHRoaXMgdGltZS4KLUlmIG5pbCwgbWVh bnMgZm9udGlmaWNhdGlvbiBpcyBuZXZlciBkZWZlcnJlZCwgcmVnYXJkbGVzcyBvZiB0aGUgdmFs dWVzIG9mIHRoZQotdmFyaWFibGVzIGBsYXp5LWxvY2stZGVmZXItb24tdGhlLWZseScsIGBsYXp5 LWxvY2stZGVmZXItb24tc2Nyb2xsaW5nJyBhbmQKLWBsYXp5LWxvY2stZGVmZXItY29udGV4dHVh bGx5Jy4KLQotVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVuIExhenkgTG9j ayBtb2RlIGlzIHR1cm5lZCBvbi4iCi0gIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJuZXZl ciIgbmlsKQotCQkgKG51bWJlciA6dGFnICJzZWNvbmRzIikpKQotCi0oZGVmY3VzdG9tIGxhenkt bG9jay1zdGVhbHRoLXRpbWUgMzAKLSAgIlRpbWUgaW4gc2Vjb25kcyB0byBkZWxheSBiZWZvcmUg YmVnaW5uaW5nIHN0ZWFsdGggZm9udGlmaWNhdGlvbi4KLVN0ZWFsdGggZm9udGlmaWNhdGlvbiBv Y2N1cnMgaWYgdGhlcmUgaXMgbm8gaW5wdXQgd2l0aGluIHRoaXMgdGltZS4KLUlmIG5pbCwgbWVh bnMgc3RlYWx0aCBmb250aWZpY2F0aW9uIGlzIG5ldmVyIHBlcmZvcm1lZC4KLQotVGhlIHZhbHVl IG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVuIExhenkgTG9jayBtb2RlIGlzIHR1cm5lZCBv bi4iCi0gIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJuZXZlciIgbmlsKQotCQkgKG51bWJl ciA6dGFnICJzZWNvbmRzIikpKQotCi0oZGVmY3VzdG9tIGxhenktbG9jay1zdGVhbHRoLWxpbmVz IChpZiBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIDEwMCAyNTApCi0gICJNYXhpbXVtIHNp emUgb2YgYSBjaHVuayBvZiBzdGVhbHRoIGZvbnRpZmljYXRpb24uCi1FYWNoIGl0ZXJhdGlvbiBv ZiBzdGVhbHRoIGZvbnRpZmljYXRpb24gY2FuIGZvbnRpZnkgdGhpcyBudW1iZXIgb2YgbGluZXMu Ci1UbyBzcGVlZCB1cCBpbnB1dCByZXNwb25zZSBkdXJpbmcgc3RlYWx0aCBmb250aWZpY2F0aW9u LCBhdCB0aGUgY29zdCBvZiBzdGVhbHRoCi10YWtpbmcgbG9uZ2VyIHRvIGZvbnRpZnksIHlvdSBj b3VsZCByZWR1Y2UgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUuIgotICA6dHlwZSAnKGludGVn ZXIgOnRhZyAibGluZXMiKSkKLQotKGRlZmN1c3RvbSBsYXp5LWxvY2stc3RlYWx0aC1sb2FkCi0g IChpZiAoY29uZGl0aW9uLWNhc2UgbmlsIChsb2FkLWF2ZXJhZ2UpIChlcnJvcikpIDIwMCkKLSAg IkxvYWQgaW4gcGVyY2VudGFnZSBhYm92ZSB3aGljaCBzdGVhbHRoIGZvbnRpZmljYXRpb24gaXMg c3VzcGVuZGVkLgotU3RlYWx0aCBmb250aWZpY2F0aW9uIHBhdXNlcyB3aGVuIHRoZSBzeXN0ZW0g c2hvcnQtdGVybSBsb2FkIGF2ZXJhZ2UgKGFzCi1yZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gYGxv YWQtYXZlcmFnZScgaWYgc3VwcG9ydGVkKSBnb2VzIGFib3ZlIHRoaXMgbGV2ZWwsCi10aHVzIHJl ZHVjaW5nIHRoZSBkZW1hbmQgdGhhdCBzdGVhbHRoIGZvbnRpZmljYXRpb24gbWFrZXMgb24gdGhl IHN5c3RlbS4KLUlmIG5pbCwgbWVhbnMgc3RlYWx0aCBmb250aWZpY2F0aW9uIGlzIG5ldmVyIHN1 c3BlbmRlZC4KLVRvIHJlZHVjZSBtYWNoaW5lIGxvYWQgZHVyaW5nIHN0ZWFsdGggZm9udGlmaWNh dGlvbiwgYXQgdGhlIGNvc3Qgb2Ygc3RlYWx0aAotdGFraW5nIGxvbmdlciB0byBmb250aWZ5LCB5 b3UgY291bGQgcmVkdWNlIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlLgotU2VlIGFsc28gYGxh enktbG9jay1zdGVhbHRoLW5pY2UnLiIKLSAgOnR5cGUgKGlmIChjb25kaXRpb24tY2FzZSBuaWwg KGxvYWQtYXZlcmFnZSkgKGVycm9yKSkKLQkgICAgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIm5ldmVy IiBuaWwpCi0JCSAgICAgKGludGVnZXIgOnRhZyAibG9hZCIpKQotCSAgJyhjb25zdCA6Zm9ybWF0 ICIldDogdW5zdXBwb3J0ZWRcbiIgbmlsKSkpCi0KLShkZWZjdXN0b20gbGF6eS1sb2NrLXN0ZWFs dGgtbmljZSAwLjEyNQotICAiVGltZSBpbiBzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4gY2h1bmtz IG9mIHN0ZWFsdGggZm9udGlmaWNhdGlvbi4KLUVhY2ggaXRlcmF0aW9uIG9mIHN0ZWFsdGggZm9u dGlmaWNhdGlvbiBpcyBzZXBhcmF0ZWQgYnkgdGhpcyBhbW91bnQgb2YgdGltZSwKLXRodXMgcmVk dWNpbmcgdGhlIGRlbWFuZCB0aGF0IHN0ZWFsdGggZm9udGlmaWNhdGlvbiBtYWtlcyBvbiB0aGUg c3lzdGVtLgotSWYgbmlsLCBtZWFucyBzdGVhbHRoIGZvbnRpZmljYXRpb24gaXMgbmV2ZXIgcGF1 c2VkLgotVG8gcmVkdWNlIG1hY2hpbmUgbG9hZCBkdXJpbmcgc3RlYWx0aCBmb250aWZpY2F0aW9u LCBhdCB0aGUgY29zdCBvZiBzdGVhbHRoCi10YWtpbmcgbG9uZ2VyIHRvIGZvbnRpZnksIHlvdSBj b3VsZCBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZS4KLVNlZSBhbHNvIGBsYXp5 LWxvY2stc3RlYWx0aC1sb2FkJy4iCi0gIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJuZXZl ciIgbmlsKQotCQkgKG51bWJlciA6dGFnICJzZWNvbmRzIikpKQotCi0oZGVmY3VzdG9tIGxhenkt bG9jay1zdGVhbHRoLXZlcmJvc2UKLSAgKGFuZCAobm90IGxhenktbG9jay1kZWZlci1jb250ZXh0 dWFsbHkpIChub3QgKG51bGwgZm9udC1sb2NrLXZlcmJvc2UpKSkKLSAgIklmIG5vbi1uaWwsIG1l YW5zIHN0ZWFsdGggZm9udGlmaWNhdGlvbiBzaG91bGQgc2hvdyBzdGF0dXMgbWVzc2FnZXMuIgot ICA6dHlwZSAnYm9vbGVhbikKLQwKLTs7IFVzZXIgRnVuY3Rpb25zOgotCi07OzsjIyNhdXRvbG9h ZAotKGRlZnVuIGxhenktbG9jay1tb2RlICgmb3B0aW9uYWwgYXJnKQotICAiVG9nZ2xlIExhenkg TG9jayBtb2RlLgotV2l0aCBhcmcsIHR1cm4gTGF6eSBMb2NrIG1vZGUgb24gaWYgYW5kIG9ubHkg aWYgYXJnIGlzIHBvc2l0aXZlLiAgRW5hYmxlIGl0Ci1hdXRvbWF0aWNhbGx5IGluIHlvdXIgYH4v LmVtYWNzJyBieToKLQotIChzZXRxIGZvbnQtbG9jay1zdXBwb3J0LW1vZGUgXFw9J2xhenktbG9j ay1tb2RlKQotCi1Gb3IgYSBuZXdlciBmb250LWxvY2sgc3VwcG9ydCBtb2RlIHdpdGggc2ltaWxh ciBmdW5jdGlvbmFsaXR5LCBzZWUKLWBqaXQtbG9jay1tb2RlJy4gIEV2ZW50dWFsbHksIExhenkg TG9jayBtb2RlIHdpbGwgYmUgZGVwcmVjYXRlZCBpbgotSklUIExvY2sncyBmYXZvci4KLQotV2hl biBMYXp5IExvY2sgbW9kZSBpcyBlbmFibGVkLCBmb250aWZpY2F0aW9uIGNhbiBiZSBsYXp5IGlu IGEgbnVtYmVyIG9mIHdheXM6Ci0KLS0gRGVtYW5kLWRyaXZlbiBidWZmZXIgZm9udGlmaWNhdGlv biBpZiBgbGF6eS1sb2NrLW1pbmltdW0tc2l6ZScgaXMgbm9uLW5pbC4KLSAgVGhpcyBtZWFucyBp bml0aWFsIGZvbnRpZmljYXRpb24gZG9lcyBub3Qgb2NjdXIgaWYgdGhlIGJ1ZmZlciBpcyBncmVh dGVyIHRoYW4KLSAgYGxhenktbG9jay1taW5pbXVtLXNpemUnIGNoYXJhY3RlcnMgaW4gbGVuZ3Ro LiAgSW5zdGVhZCwgZm9udGlmaWNhdGlvbiBvY2N1cnMKLSAgd2hlbiBuZWNlc3NhcnksIHN1Y2gg YXMgd2hlbiBzY3JvbGxpbmcgdGhyb3VnaCB0aGUgYnVmZmVyIHdvdWxkIG90aGVyd2lzZQotICBy ZXZlYWwgdW5mb250aWZpZWQgYXJlYXMuICBUaGlzIGlzIHVzZWZ1bCBpZiBidWZmZXIgZm9udGlm aWNhdGlvbiBpcyB0b28gc2xvdwotICBmb3IgbGFyZ2UgYnVmZmVycy4KLQotLSBEZWZlcnJlZCBz Y3JvbGwgZm9udGlmaWNhdGlvbiBpZiBgbGF6eS1sb2NrLWRlZmVyLW9uLXNjcm9sbGluZycgaXMg bm9uLW5pbC4KLSAgVGhpcyBtZWFucyBkZW1hbmQtZHJpdmVuIGZvbnRpZmljYXRpb24gZG9lcyBu b3Qgb2NjdXIgYXMgeW91IHNjcm9sbC4KLSAgSW5zdGVhZCwgZm9udGlmaWNhdGlvbiBpcyBkZWZl cnJlZCB1bnRpbCBhZnRlciBgbGF6eS1sb2NrLWRlZmVyLXRpbWUnIHNlY29uZHMKLSAgb2YgRW1h Y3MgaWRsZSB0aW1lLCB3aGlsZSBFbWFjcyByZW1haW5zIGlkbGUuICBUaGlzIGlzIHVzZWZ1bCBp ZgotICBmb250aWZpY2F0aW9uIGlzIHRvbyBzbG93IHRvIGtlZXAgdXAgd2l0aCBzY3JvbGxpbmcu Ci0KLS0gRGVmZXJyZWQgb24tdGhlLWZseSBmb250aWZpY2F0aW9uIGlmIGBsYXp5LWxvY2stZGVm ZXItb24tdGhlLWZseScgaXMgbm9uLW5pbC4KLSAgVGhpcyBtZWFucyBvbi10aGUtZmx5IGZvbnRp ZmljYXRpb24gZG9lcyBub3Qgb2NjdXIgYXMgeW91IHR5cGUuICBJbnN0ZWFkLAotICBmb250aWZp Y2F0aW9uIGlzIGRlZmVycmVkIHVudGlsIGFmdGVyIGBsYXp5LWxvY2stZGVmZXItdGltZScgc2Vj b25kcyBvZiBFbWFjcwotICBpZGxlIHRpbWUsIHdoaWxlIEVtYWNzIHJlbWFpbnMgaWRsZS4gIFRo aXMgaXMgdXNlZnVsIGlmIGZvbnRpZmljYXRpb24gaXMgdG9vCi0gIHNsb3cgdG8ga2VlcCB1cCB3 aXRoIHlvdXIgdHlwaW5nLgotCi0tIERlZmVycmVkIGNvbnRleHQgZm9udGlmaWNhdGlvbiBpZiBg bGF6eS1sb2NrLWRlZmVyLWNvbnRleHR1YWxseScgaXMgbm9uLW5pbC4KLSAgVGhpcyBtZWFucyBm b250aWZpY2F0aW9uIHVwZGF0ZXMgdGhlIGJ1ZmZlciBjb3JyZXNwb25kaW5nIHRvIHRydWUgc3lu dGFjdGljCi0gIGNvbnRleHQsIGFmdGVyIGBsYXp5LWxvY2stZGVmZXItdGltZScgc2Vjb25kcyBv ZiBFbWFjcyBpZGxlIHRpbWUsIHdoaWxlIEVtYWNzCi0gIHJlbWFpbnMgaWRsZS4gIE90aGVyd2lz ZSwgZm9udGlmaWNhdGlvbiBvY2N1cnMgb24gbW9kaWZpZWQgbGluZXMgb25seSwgYW5kCi0gIHN1 YnNlcXVlbnQgbGluZXMgY2FuIHJlbWFpbiBmb250aWZpZWQgY29ycmVzcG9uZGluZyB0byBwcmV2 aW91cyBzeW50YWN0aWMKLSAgY29udGV4dHMuICBUaGlzIGlzIHVzZWZ1bCB3aGVyZSBzdHJpbmdz IG9yIGNvbW1lbnRzIHNwYW4gbGluZXMuCi0KLS0gU3RlYWx0aHkgYnVmZmVyIGZvbnRpZmljYXRp b24gaWYgYGxhenktbG9jay1zdGVhbHRoLXRpbWUnIGlzIG5vbi1uaWwuCi0gIFRoaXMgbWVhbnMg cmVtYWluaW5nIHVuZm9udGlmaWVkIGFyZWFzIG9mIGJ1ZmZlcnMgYXJlIGZvbnRpZmllZCBpZiBF bWFjcyBoYXMKLSAgYmVlbiBpZGxlIGZvciBgbGF6eS1sb2NrLXN0ZWFsdGgtdGltZScgc2Vjb25k cywgd2hpbGUgRW1hY3MgcmVtYWlucyBpZGxlLgotICBUaGlzIGlzIHVzZWZ1bCBpZiBhbnkgYnVm ZmVyIGhhcyBhbnkgZGVmZXJyZWQgZm9udGlmaWNhdGlvbi4KLQotQmFzaWMgRm9udCBMb2NrIG1v ZGUgb24tdGhlLWZseSBmb250aWZpY2F0aW9uIGJlaGF2aW9yIGZvbnRpZmllcyBtb2RpZmllZAot bGluZXMgb25seS4gIFRodXMsIGlmIGBsYXp5LWxvY2stZGVmZXItY29udGV4dHVhbGx5JyBpcyBu b24tbmlsLCBMYXp5IExvY2sgbW9kZQotb24tdGhlLWZseSBmb250aWZpY2F0aW9uIG1heSBmb250 aWZ5IGRpZmZlcmVudGx5LCBhbGJlaXQgY29ycmVjdGx5LiAgSW4gYW55Ci1ldmVudCwgdG8gcmVm b250aWZ5IHNvbWUgbGluZXMgeW91IGNhbiB1c2UgXFxbZm9udC1sb2NrLWZvbnRpZnktYmxvY2td LgotCi1TdGVhbHRoIGZvbnRpZmljYXRpb24gb25seSBvY2N1cnMgd2hpbGUgdGhlIHN5c3RlbSBy ZW1haW5zIHVubG9hZGVkLgotSWYgdGhlIHN5c3RlbSBsb2FkIHJpc2VzIGFib3ZlIGBsYXp5LWxv Y2stc3RlYWx0aC1sb2FkJyBwZXJjZW50LCBzdGVhbHRoCi1mb250aWZpY2F0aW9uIGlzIHN1c3Bl bmRlZC4gIFN0ZWFsdGggZm9udGlmaWNhdGlvbiBpbnRlbnNpdHkgaXMgY29udHJvbGxlZCB2aWEK LXRoZSB2YXJpYWJsZSBgbGF6eS1sb2NrLXN0ZWFsdGgtbmljZScgYW5kIGBsYXp5LWxvY2stc3Rl YWx0aC1saW5lcycsIGFuZAotdmVyYm9zaXR5IGlzIGNvbnRyb2xsZWQgdmlhIHRoZSB2YXJpYWJs ZSBgbGF6eS1sb2NrLXN0ZWFsdGgtdmVyYm9zZScuIgotICAoaW50ZXJhY3RpdmUgIlAiKQotICAo bGV0KiAoKHdhcy1vbiBsYXp5LWxvY2stbW9kZSkKLQkgKG5vdy1vbiAodW5sZXNzIChtZW1xICds YXp5LWxvY2stbW9kZSBmb250LWxvY2staW5oaWJpdC10aGluZy1sb2NrKQotCQkgICAoaWYgYXJn ICg+IChwcmVmaXgtbnVtZXJpYy12YWx1ZSBhcmcpIDApIChub3Qgd2FzLW9uKSkpKSkKLSAgICAo Y29uZCAoKGFuZCBub3ctb24gKG5vdCBmb250LWxvY2stbW9kZSkpCi0JICAgOzsgVHVybmVkIG9u IGBsYXp5LWxvY2stbW9kZScgcmF0aGVyIHRoYW4gYGZvbnQtbG9jay1tb2RlJy4KLSAgICAgICAg ICAgKG1lc3NhZ2UgIlVzZSBmb250LWxvY2stc3VwcG9ydC1tb2RlIHJhdGhlciB0aGFuIGNhbGxp bmcgbGF6eS1sb2NrLW1vZGUiKQotICAgICAgICAgICAoc2l0LWZvciAyKSkKLQkgIChub3ctb24K LQkgICA7OyBUdXJuIG91cnNlbHZlcyBvbi4KLQkgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxl ICdsYXp5LWxvY2stbW9kZSkgdCkKLQkgICAobGF6eS1sb2NrLWluc3RhbGwpKQotCSAgKHdhcy1v bgotCSAgIDs7IFR1cm4gb3Vyc2VsdmVzIG9mZi4KLQkgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlh YmxlICdsYXp5LWxvY2stbW9kZSkgbmlsKQotCSAgIChsYXp5LWxvY2stdW5zdGFsbCkpKSkpCi0K LTs7OyMjI2F1dG9sb2FkCi0oZGVmdW4gdHVybi1vbi1sYXp5LWxvY2sgKCkKLSAgIlVuY29uZGl0 aW9uYWxseSB0dXJuIG9uIExhenkgTG9jayBtb2RlLiIKLSAgKGxhenktbG9jay1tb2RlIHQpKQot Ci0oZGVmdW4gbGF6eS1sb2NrLWluc3RhbGwgKCkKLSAgKGxldCAoKG1pbi1zaXplIChmb250LWxv Y2stdmFsdWUtaW4tbWFqb3ItbW9kZSBsYXp5LWxvY2stbWluaW11bS1zaXplKSkKLQkoZGVmZXIt Y2hhbmdlIChhbmQgbGF6eS1sb2NrLWRlZmVyLXRpbWUgbGF6eS1sb2NrLWRlZmVyLW9uLXRoZS1m bHkpKQotCShkZWZlci1zY3JvbGwgKGFuZCBsYXp5LWxvY2stZGVmZXItdGltZSBsYXp5LWxvY2st ZGVmZXItb24tc2Nyb2xsaW5nKSkKLQkoZGVmZXItY29udGV4dCAoYW5kIGxhenktbG9jay1kZWZl ci10aW1lIGxhenktbG9jay1kZWZlci1jb250ZXh0dWFsbHkKLQkJCSAgICAob3IgKGVxIGxhenkt bG9jay1kZWZlci1jb250ZXh0dWFsbHkgdCkKLQkJCQkobnVsbCBmb250LWxvY2sta2V5d29yZHMt b25seSkpKSkpCi0gICAgOzsKLSAgICA7OyBUZWxsIEZvbnQgTG9jayB3aGV0aGVyIExhenkgTG9j ayB3aWxsIGRvIGZvbnRpZmljYXRpb24uCi0gICAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZvbnQt bG9jay1mb250aWZpZWQpCi0gICAgKHNldHEgZm9udC1sb2NrLWZvbnRpZmllZCAoYW5kIG1pbi1z aXplICg+PSAoYnVmZmVyLXNpemUpIG1pbi1zaXplKSkpCi0gICAgOzsKLSAgICA7OyBBZGQgdGhl IHRleHQgcHJvcGVydGllcyBhbmQgZm9udGlmeS4KLSAgICAoaWYgKG5vdCBmb250LWxvY2stZm9u dGlmaWVkKQotCShsYXp5LWxvY2stYWZ0ZXItZm9udGlmeS1idWZmZXIpCi0gICAgICA7OyBNYWtl IHN1cmUgd2UgZm9udGlmeSBpbiBhbnkgZXhpc3Rpbmcgd2luZG93cyBzaG93aW5nIHRoZSBidWZm ZXIuCi0gICAgICAobGV0ICgod2luZG93cyAoZ2V0LWJ1ZmZlci13aW5kb3ctbGlzdCAoY3VycmVu dC1idWZmZXIpICdub21pbmkgdCkpKQotCShsYXp5LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZl cikKLQkod2hpbGUgd2luZG93cwotCSAgKGxhenktbG9jay1mb250aWZ5LWNvbnNlcnZhdGl2ZWx5 IChjYXIgd2luZG93cykpCi0JICAoc2V0cSB3aW5kb3dzIChjZHIgd2luZG93cykpKSkpCi0gICAg OzsKLSAgICA7OyBBZGQgdGhlIGZvbnRpZmljYXRpb24gaG9va3MuCi0gICAgKGxhenktbG9jay1p bnN0YWxsLWhvb2tzCi0gICAgIGZvbnQtbG9jay1mb250aWZpZWQKLSAgICAgKGNvbmQgKChlcSAo Y2FyLXNhZmUgZGVmZXItY2hhbmdlKSAnbm90KQotCSAgICAobm90IChtZW1xIG1ham9yLW1vZGUg KGNkciBkZWZlci1jaGFuZ2UpKSkpCi0JICAgKChsaXN0cCBkZWZlci1jaGFuZ2UpCi0JICAgICht ZW1xIG1ham9yLW1vZGUgZGVmZXItY2hhbmdlKSkKLQkgICAodAotCSAgICBkZWZlci1jaGFuZ2Up KQotICAgICAoZXEgZGVmZXItc2Nyb2xsIHQpCi0gICAgIGRlZmVyLWNvbnRleHQpCi0gICAgOzsK LSAgICA7OyBBZGQgdGhlIGZvbnRpZmljYXRpb24gdGltZXJzLgotICAgIChsYXp5LWxvY2staW5z dGFsbC10aW1lcnMKLSAgICAgKGlmIChvciBkZWZlci1jaGFuZ2UgZGVmZXItc2Nyb2xsIGRlZmVy LWNvbnRleHQpIGxhenktbG9jay1kZWZlci10aW1lKQotICAgICBsYXp5LWxvY2stc3RlYWx0aC10 aW1lKSkpCi0KLShkZWZ1biBsYXp5LWxvY2staW5zdGFsbC1ob29rcyAoZm9udGlmeWluZwotCQkJ CWRlZmVyLWNoYW5nZSBkZWZlci1zY3JvbGwgZGVmZXItY29udGV4dCkKLSAgOzsKLSAgOzsgQWRk IGhvb2sgaWYgbGF6eS1sb2NrLmVsIGlzIGZvbnRpZnlpbmcgb24gc2Nyb2xsaW5nIG9yIGlzIGRl ZmVycmluZy4KLSAgKHdoZW4gKG9yIGZvbnRpZnlpbmcgZGVmZXItY2hhbmdlIGRlZmVyLXNjcm9s bCBkZWZlci1jb250ZXh0KQotICAgIChhZGQtaG9vayAnd2luZG93LXNjcm9sbC1mdW5jdGlvbnMg KGlmIGRlZmVyLXNjcm9sbAotCQkJCQkgICAjJ2xhenktbG9jay1kZWZlci1hZnRlci1zY3JvbGwK LQkJCQkJICMnbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsKQotCSAgICAgIG5pbCB0KSkK LSAgOzsKLSAgOzsgQWRkIGhvb2sgaWYgbGF6eS1sb2NrLmVsIGlzIGZvbnRpZnlpbmcgYW5kIGlz IG5vdCBkZWZlcnJpbmcgY2hhbmdlcy4KLSAgKHdoZW4gKGFuZCBmb250aWZ5aW5nIChub3QgZGVm ZXItY2hhbmdlKSAobm90IGRlZmVyLWNvbnRleHQpKQotICAgIChhZGQtaG9vayAnYmVmb3JlLWNo YW5nZS1mdW5jdGlvbnMgIydsYXp5LWxvY2stYXJyYW5nZS1iZWZvcmUtY2hhbmdlIG5pbCB0KSkK LSAgOzsKLSAgOzsgUmVwbGFjZSBGb250IExvY2sgbW9kZSBob29rLgotICAocmVtb3ZlLWhvb2sg J2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgIydmb250LWxvY2stYWZ0ZXItY2hhbmdlLWZ1bmN0aW9u IHQpCi0gIChhZGQtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucwotCSAgICAoY29uZCAoKGFu ZCBkZWZlci1jaGFuZ2UgZGVmZXItY29udGV4dCkKLQkJICAgIydsYXp5LWxvY2stZGVmZXItcmVz dC1hZnRlci1jaGFuZ2UpCi0JCSAgKGRlZmVyLWNoYW5nZQotCQkgICAjJ2xhenktbG9jay1kZWZl ci1saW5lLWFmdGVyLWNoYW5nZSkKLQkJICAoZGVmZXItY29udGV4dAotCQkgICAjJ2xhenktbG9j ay1mb250aWZ5LXJlc3QtYWZ0ZXItY2hhbmdlKQotCQkgICh0Ci0JCSAgICMnbGF6eS1sb2NrLWZv bnRpZnktbGluZS1hZnRlci1jaGFuZ2UpKQotCSAgICBuaWwgdCkKLSAgOzsKLSAgOzsgQWRkIHBh Y2thZ2Utc3BlY2lmaWMgaG9vay4KLSAgKGFkZC1ob29rICdvdXRsaW5lLXZpZXctY2hhbmdlLWhv b2sgIydsYXp5LWxvY2stZm9udGlmeS1hZnRlci12aXNhZ2UgbmlsIHQpCi0gIChhZGQtaG9vayAn aHMtaGlkZS1ob29rICMnbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItdmlzYWdlIG5pbCB0KSkKLQot KGRlZnVuIGxhenktbG9jay1pbnN0YWxsLXRpbWVycyAoZHRpbWUgc3RpbWUpCi0gIDs7IFNjaGVk dWxlIG9yIHJlLXNjaGVkdWxlIHRoZSBkZWZlcnJhbCBhbmQgc3RlYWx0aCB0aW1lcnMuCi0gIDs7 IFRoZSBsYXlvdXQgb2YgYGxhenktbG9jay10aW1lcnMnIGlzOgotICA7OyAgKChERUZFUi1USU1F IC4gREVGRVItVElNRVIpIChTVEVBTFRILVRJTUUgLiBTVEVBTFRILVRJTUVSKQotICA7OyBJZiBh biBpZGxlIHRpbWVvdXQgaGFzIGNoYW5nZWQsIGNhbmNlbCB0aGUgZXhpc3RpbmcgaWRsZSB0aW1l ciAoaWYgdGhlcmUKLSAgOzsgaXMgb25lKSBhbmQgc2NoZWR1bGUgYSBuZXcgb25lIChpZiB0aGUg bmV3IGlkbGUgdGltZW91dCBpcyBub24tbmlsKS4KLSAgKHVubGVzcyAoZXEgZHRpbWUgKGNhciAo Y2FyIGxhenktbG9jay10aW1lcnMpKSkKLSAgICAobGV0ICgoZGVmZXIgKGNhciBsYXp5LWxvY2st dGltZXJzKSkpCi0gICAgICAod2hlbiAoY2RyIGRlZmVyKQotCShjYW5jZWwtdGltZXIgKGNkciBk ZWZlcikpKQotICAgICAgKHNldGNhciBsYXp5LWxvY2stdGltZXJzIChjb25zIGR0aW1lIChhbmQg ZHRpbWUKLQkgICAgICAocnVuLXdpdGgtaWRsZS10aW1lciBkdGltZSB0ICMnbGF6eS1sb2NrLWZv bnRpZnktYWZ0ZXItZGVmZXIpKSkpKSkKLSAgKHVubGVzcyAoZXEgc3RpbWUgKGNhciAoY2RyIGxh enktbG9jay10aW1lcnMpKSkKLSAgICAobGV0ICgoc3RlYWx0aCAoY2RyIGxhenktbG9jay10aW1l cnMpKSkKLSAgICAgICh3aGVuIChjZHIgc3RlYWx0aCkKLQkoY2FuY2VsLXRpbWVyIChjZHIgc3Rl YWx0aCkpKQotICAgICAgKHNldGNkciBsYXp5LWxvY2stdGltZXJzIChjb25zIHN0aW1lIChhbmQg c3RpbWUKLQkgICAgICAocnVuLXdpdGgtaWRsZS10aW1lciBzdGltZSB0ICMnbGF6eS1sb2NrLWZv bnRpZnktYWZ0ZXItaWRsZSkpKSkpKSkKLQotKGRlZnVuIGxhenktbG9jay11bnN0YWxsICgpCi0g IDs7Ci0gIDs7IElmIEZvbnQgTG9jayBtb2RlIGlzIHN0aWxsIGVuYWJsZWQsIG1ha2Ugc3VyZSB0 aGF0IHRoZSBidWZmZXIgaXMKLSAgOzsgZm9udGlmaWVkLCBhbmQgcmVpbnN0YWxsIGl0cyBob29r LiAgV2UgbXVzdCBkbyB0aGlzIGZpcnN0LgotICAod2hlbiBmb250LWxvY2stbW9kZQotICAgICh3 aGVuIChsYXp5LWxvY2stdW5mb250aWZpZWQtcCkKLSAgICAgIChsZXQgKCh2ZXJib3NlIChpZiAo bnVtYmVycCBmb250LWxvY2stdmVyYm9zZSkKLQkJCSAoPiAoYnVmZmVyLXNpemUpIGZvbnQtbG9j ay12ZXJib3NlKQotCQkgICAgICAgZm9udC1sb2NrLXZlcmJvc2UpKSkKLQkod2l0aC10ZW1wLW1l c3NhZ2UKLQkgICAgKHdoZW4gdmVyYm9zZQotCSAgICAgIChmb3JtYXQgIkZvbnRpZnlpbmcgJXMu Li4iIChidWZmZXItbmFtZSkpKQotCSAgOzsgTWFrZSBzdXJlIHdlIGZvbnRpZnkgZXRjLiBpbiB0 aGUgd2hvbGUgYnVmZmVyLgotCSAgKHNhdmUtcmVzdHJpY3Rpb24KLQkgICAgKHdpZGVuKQotCSAg ICAobGF6eS1sb2NrLWZvbnRpZnktcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKSkpKSkK LSAgICAoYWRkLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgIydmb250LWxvY2stYWZ0ZXIt Y2hhbmdlLWZ1bmN0aW9uIG5pbCB0KSkKLSAgOzsKLSAgOzsgUmVtb3ZlIHRoZSB0ZXh0IHByb3Bl cnRpZXMuCi0gIChsYXp5LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlcikKLSAgOzsKLSAgOzsg UmVtb3ZlIHRoZSBmb250aWZpY2F0aW9uIGhvb2tzLgotICAocmVtb3ZlLWhvb2sgJ3dpbmRvdy1z Y3JvbGwtZnVuY3Rpb25zICMnbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsIHQpCi0gIChy ZW1vdmUtaG9vayAnd2luZG93LXNjcm9sbC1mdW5jdGlvbnMgIydsYXp5LWxvY2stZGVmZXItYWZ0 ZXItc2Nyb2xsIHQpCi0gIChyZW1vdmUtaG9vayAnYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMgIyds YXp5LWxvY2stYXJyYW5nZS1iZWZvcmUtY2hhbmdlIHQpCi0gIChyZW1vdmUtaG9vayAnYWZ0ZXIt Y2hhbmdlLWZ1bmN0aW9ucyAjJ2xhenktbG9jay1mb250aWZ5LWxpbmUtYWZ0ZXItY2hhbmdlIHQp Ci0gIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAjJ2xhenktbG9jay1mb250 aWZ5LXJlc3QtYWZ0ZXItY2hhbmdlIHQpCi0gIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1 bmN0aW9ucyAjJ2xhenktbG9jay1kZWZlci1saW5lLWFmdGVyLWNoYW5nZSB0KQotICAocmVtb3Zl LWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgIydsYXp5LWxvY2stZGVmZXItcmVzdC1hZnRl ci1jaGFuZ2UgdCkKLSAgKHJlbW92ZS1ob29rICdvdXRsaW5lLXZpZXctY2hhbmdlLWhvb2sgIyds YXp5LWxvY2stZm9udGlmeS1hZnRlci12aXNhZ2UgdCkKLSAgKHJlbW92ZS1ob29rICdocy1oaWRl LWhvb2sgIydsYXp5LWxvY2stZm9udGlmeS1hZnRlci12aXNhZ2UgdCkpCi0MCi07OyBIb29rIGZ1 bmN0aW9ucy4KLQotOzsgTGF6eSBMb2NrIG1vZGUgaW50ZXJ2ZW5lcyB3aGVuICgxKSBhIHByZXZp b3VzbHkgaW52aXNpYmxlIGJ1ZmZlciByZWdpb24KLTs7IGJlY29tZXMgdmlzaWJsZSwgaS5lLiwg Zm9yIGRlbWFuZC0gb3IgZGVmZXItZHJpdmVuIG9uLXRoZS1zY3JvbGwKLTs7IGZvbnRpZmljYXRp b24sICgyKSBhIGJ1ZmZlciBtb2RpZmljYXRpb24gb2NjdXJzLCBpLmUuLCBmb3IgZGVmZXItZHJp dmVuCi07OyBvbi10aGUtZmx5IGZvbnRpZmljYXRpb24sICgzKSBFbWFjcyBiZWNvbWVzIGlkbGUs IGkuZS4sIGZvciBmb250aWZpY2F0aW9uIG9mCi07OyBkZWZlcnJlZCBmb250aWZpY2F0aW9uIGFu ZCBzdGVhbHRoIGZvbnRpZmljYXRpb24sIGFuZCAoNCkgb3RoZXIgc3BlY2lhbAotOzsgb2NjYXNp b25zLgotCi07OyAxLiAgVGhlcmUgYXJlIHRocmVlIHdheXMgd2hlcmVieSB0aGlzIGNhbiBoYXBw ZW4uCi07OwotOzsgKGEpIFNjcm9sbGluZyB0aGUgd2luZG93LCBlaXRoZXIgZXhwbGljaXRseSAo ZS5nLiwgYHNjcm9sbC11cCcpIG9yCi07OyAgICAgaW1wbGljaXRseSAoZS5nLiwgYHNlYXJjaC1m b3J3YXJkJykuICBIZXJlLCBgd2luZG93LXN0YXJ0JyBjaGFuZ2VzLgotOzsgICAgIEZvbnRpZmlj YXRpb24gb2NjdXJzIGJ5IGFkZGluZyBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsJyAo Zm9yCi07OyAgICAgZGVtYW5kLWRyaXZlbiBmb250aWZpY2F0aW9uKSBvciBgbGF6eS1sb2NrLWRl ZmVyLWFmdGVyLXNjcm9sbCcgKGZvcgotOzsgICAgIGRlZmVyLWRyaXZlbiBmb250aWZpY2F0aW9u KSB0byB0aGUgaG9vayBgd2luZG93LXNjcm9sbC1mdW5jdGlvbnMnLgotCi0oZGVmdW4gbGF6eS1s b2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsICh3aW5kb3cgd2luZG93LXN0YXJ0KQotICA7OyBDYWxs ZWQgZnJvbSBgd2luZG93LXNjcm9sbC1mdW5jdGlvbnMnLgotICA7OyBGb250aWZ5IFdJTkRPVyBm cm9tIFdJTkRPVy1TVEFSVCBmb2xsb3dpbmcgdGhlIHNjcm9sbC4KLSAgKGxldCAoKGluaGliaXQt cG9pbnQtbW90aW9uLWhvb2tzIHQpKQotICAgIChsYXp5LWxvY2stZm9udGlmeS1yZWdpb24gd2lu ZG93LXN0YXJ0ICh3aW5kb3ctZW5kIHdpbmRvdyB0KSkpCi0gIDs7IEEgcHJpb3IgZGVsZXRpb24g dGhhdCBkaWQgbm90IGNhdXNlIHNjcm9sbGluZywgZm9sbG93ZWQgYnkgYSBzY3JvbGwsIHdvdWxk Ci0gIDs7IHJlc3VsdCBpbiBhbiB1bm5lY2Vzc2FyeSB0cmlnZ2VyIGFmdGVyIHRoaXMgaWYgd2Ug ZGlkIG5vdCBjYW5jZWwgaXQgbm93LgotICAoc2V0LXdpbmRvdy1yZWRpc3BsYXktZW5kLXRyaWdn ZXIgd2luZG93IG5pbCkpCi0KLShkZWZ1biBsYXp5LWxvY2stZGVmZXItYWZ0ZXItc2Nyb2xsICh3 aW5kb3cgX3dpbmRvdy1zdGFydCkKLSAgOzsgQ2FsbGVkIGZyb20gYHdpbmRvdy1zY3JvbGwtZnVu Y3Rpb25zJy4KLSAgOzsgRGVmZXIgZm9udGlmaWNhdGlvbiBmb2xsb3dpbmcgdGhlIHNjcm9sbC4g IFNhdmUgdGhlIGN1cnJlbnQgYnVmZmVyIHNvIHRoYXQKLSAgOzsgd2Ugc3Vic2VxdWVudGx5IGZv bnRpZnkgaW4gYWxsIHdpbmRvd3Mgc2hvd2luZyB0aGUgYnVmZmVyLgotICAodW5sZXNzIChtZW1x IChjdXJyZW50LWJ1ZmZlcikgbGF6eS1sb2NrLWJ1ZmZlcnMpCi0gICAgKHB1c2ggKGN1cnJlbnQt YnVmZmVyKSBsYXp5LWxvY2stYnVmZmVycykpCi0gIDs7IEEgcHJpb3IgZGVsZXRpb24gdGhhdCBk aWQgbm90IGNhdXNlIHNjcm9sbGluZywgZm9sbG93ZWQgYnkgYSBzY3JvbGwsIHdvdWxkCi0gIDs7 IHJlc3VsdCBpbiBhbiB1bm5lY2Vzc2FyeSB0cmlnZ2VyIGFmdGVyIHRoaXMgaWYgd2UgZGlkIG5v dCBjYW5jZWwgaXQgbm93LgotICAoc2V0LXdpbmRvdy1yZWRpc3BsYXktZW5kLXRyaWdnZXIgd2lu ZG93IG5pbCkpCi0KLTs7IChiKSBSZXNpemluZyB0aGUgd2luZG93LCBlaXRoZXIgZXhwbGljaXRs eSAoZS5nLiwgYGVubGFyZ2Utd2luZG93Jykgb3IKLTs7ICAgICBpbXBsaWNpdGx5IChlLmcuLCBg ZGVsZXRlLW90aGVyLXdpbmRvd3MnKS4gIEhlcmUsIGB3aW5kb3ctZW5kJyBjaGFuZ2VzLgotOzsg ICAgIEZvbnRpZmljYXRpb24gb2NjdXJzIGJ5IGFkZGluZyBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0 ZXItcmVzaXplJyB0byB0aGUKLTs7ICAgICBob29rIGB3aW5kb3ctc2l6ZS1jaGFuZ2UtZnVuY3Rp b25zJy4KLQotKGRlZnVuIGxhenktbG9jay1mb250aWZ5LWFmdGVyLXJlc2l6ZSAoZnJhbWUpCi0g IDs7IENhbGxlZCBmcm9tIGB3aW5kb3ctc2l6ZS1jaGFuZ2UtZnVuY3Rpb25zJy4KLSAgOzsgRm9u dGlmeSB3aW5kb3dzIGluIEZSQU1FIGZvbGxvd2luZyB0aGUgcmVzaXplLiAgV2UgY2Fubm90IHVz ZQotICA7OyBgd2luZG93LXN0YXJ0JyBvciBgd2luZG93LWVuZCcgc28gd2UgZm9udGlmeSBjb25z ZXJ2YXRpdmVseS4KLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKHNhdmUtc2VsZWN0ZWQtd2luZG93 Ci0gICAgICAoc2VsZWN0LWZyYW1lIGZyYW1lKQotICAgICAgKHdhbGstd2luZG93cyAoZnVuY3Rp b24gKGxhbWJkYSAod2luZG93KQotCQkgICAgICAgKHNldC1idWZmZXIgKHdpbmRvdy1idWZmZXIg d2luZG93KSkKLQkJICAgICAgICh3aGVuIGxhenktbG9jay1tb2RlCi0JCQkgKGxhenktbG9jay1m b250aWZ5LWNvbnNlcnZhdGl2ZWx5IHdpbmRvdykpCi0JCSAgICAgICAoc2V0LXdpbmRvdy1yZWRp c3BsYXktZW5kLXRyaWdnZXIgd2luZG93IG5pbCkpKQotCQkgICAgJ25vbWluaSBmcmFtZSkpKSkK LQotOzsgKGMpIERlbGV0aW9uIGluIHRoZSBidWZmZXIuICBIZXJlLCBhIGB3aW5kb3ctZW5kJyBt YXJrZXIgY2FuIGJlY29tZSB2aXNpYmxlLgotOzsgICAgIEZvbnRpZmljYXRpb24gb2NjdXJzIGJ5 IGFkZGluZyBgbGF6eS1sb2NrLWFycmFuZ2UtYmVmb3JlLWNoYW5nZScgdG8KLTs7ICAgICBgYmVm b3JlLWNoYW5nZS1mdW5jdGlvbnMnIGFuZCBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItdHJpZ2dl cicgdG8gdGhlCi07OyAgICAgaG9vayBgcmVkaXNwbGF5LWVuZC10cmlnZ2VyLWZ1bmN0aW9ucycu ICBCZWZvcmUgZXZlcnkgZGVsZXRpb24sIHRoZQotOzsgICAgIG1hcmtlciBgd2luZG93LXJlZGlz cGxheS1lbmQtdHJpZ2dlcicgcG9zaXRpb24gaXMgc2V0IHRvIHRoZSBzb29uLXRvLWJlCi07OyAg ICAgY2hhbmdlZCBgd2luZG93LWVuZCcgcG9zaXRpb24uICBJZiB0aGUgbWFya2VyIGJlY29tZXMg dmlzaWJsZSwKLTs7ICAgICBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItdHJpZ2dlcicgZ2V0cyBj YWxsZWQuICBPdWNoLiAgTm90ZSB0aGF0IHdlIG9ubHkKLTs7ICAgICBoYXZlIHRvIGRlYWwgd2l0 aCB0aGlzIGV2ZW50dWFsaXR5IGlmIHRoZXJlIGlzIG5vIG9uLXRoZS1mbHkgZGVmZXJyYWwuCi0K LShkZWZ1biBsYXp5LWxvY2stYXJyYW5nZS1iZWZvcmUtY2hhbmdlIChiZWcgZW5kKQotICA7OyBD YWxsZWQgZnJvbSBgYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMnLgotICA7OyBBcnJhbmdlIHRoYXQg aWYgdGV4dCBiZWNvbWVzIHZpc2libGUgaXQgd2lsbCBiZSBmb250aWZpZWQgKGlmIGEgZGVsZXRp b24KLSAgOzsgaXMgcGVuZGluZywgdGV4dCBtaWdodCBiZWNvbWUgdmlzaWJsZSBhdCB0aGUgYm90 dG9tKS4KLSAgKHVubGVzcyAoZXEgYmVnIGVuZCkKLSAgICAobGV0ICgod2luZG93cyAoZ2V0LWJ1 ZmZlci13aW5kb3ctbGlzdCAoY3VycmVudC1idWZmZXIpICdub21pbmkgdCkpIHdpbmRvdykKLSAg ICAgICh3aGlsZSB3aW5kb3dzCi0JKHNldHEgd2luZG93IChjYXIgd2luZG93cykpCi0JKHVubGVz cyAobWFya2VycCAod2luZG93LXJlZGlzcGxheS1lbmQtdHJpZ2dlciB3aW5kb3cpKQotCSAgKHNl dC13aW5kb3ctcmVkaXNwbGF5LWVuZC10cmlnZ2VyIHdpbmRvdyAobWFrZS1tYXJrZXIpKSkKLQko c2V0LW1hcmtlciAod2luZG93LXJlZGlzcGxheS1lbmQtdHJpZ2dlciB3aW5kb3cpICh3aW5kb3ct ZW5kIHdpbmRvdykpCi0JKHNldHEgd2luZG93cyAoY2RyIHdpbmRvd3MpKSkpKSkKLQotKGRlZnVu IGxhenktbG9jay1mb250aWZ5LWFmdGVyLXRyaWdnZXIgKHdpbmRvdyB0cmlnZ2VyLXBvaW50KQot ICA7OyBDYWxsZWQgZnJvbSBgcmVkaXNwbGF5LWVuZC10cmlnZ2VyLWZ1bmN0aW9ucycuCi0gIDs7 IEZvbnRpZnkgV0lORE9XIGZyb20gVFJJR0dFUi1QT0lOVCBmb2xsb3dpbmcgdGhlIHJlZGlzcGxh eS4KLSAgOzsgV2UgY291bGQgcHJvYmFibHkganVzdCB1c2UgYGxhenktbG9jay1mb250aWZ5LWFm dGVyLXNjcm9sbCcgd2l0aG91dCBsb3NzOgotICA7OyAgKGlubGluZSAobGF6eS1sb2NrLWZvbnRp ZnktYWZ0ZXItc2Nyb2xsIHdpbmRvdyAod2luZG93LXN0YXJ0IHdpbmRvdykpKQotICAobGV0ICgo aW5oaWJpdC1wb2ludC1tb3Rpb24taG9va3MgdCkpCi0gICAgKGxhenktbG9jay1mb250aWZ5LXJl Z2lvbiB0cmlnZ2VyLXBvaW50ICh3aW5kb3ctZW5kIHdpbmRvdyB0KSkpKQotCi07OyAyLiAgTW9k aWZpZWQgdGV4dCBtdXN0IGJlIG1hcmtlZCBhcyB1bmZvbnRpZmllZCBzbyBpdCBjYW4gYmUgaWRl bnRpZmllZCBhbmQKLTs7ICAgICBmb250aWZpZWQgbGF0ZXIgd2hlbiBFbWFjcyBpcyBpZGxlLiAg RGVmZXJyYWwgb2NjdXJzIGJ5IGFkZGluZyBvbmUgb2YKLTs7ICAgICBgbGF6eS1sb2NrLWZvbnRp ZnktKi1hZnRlci1jaGFuZ2UnIChmb3Igb24tdGhlLWZseSBmb250aWZpY2F0aW9uKSBvcgotOzsg ICAgIGBsYXp5LWxvY2stZGVmZXItKi1hZnRlci1jaGFuZ2UnIChmb3IgZGVmZXJyZWQgZm9udGlm aWNhdGlvbikgdG8gdGhlCi07OyAgICAgaG9vayBgYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucycuCi0K LShkZWZhbGlhcyAnbGF6eS1sb2NrLWZvbnRpZnktbGluZS1hZnRlci1jaGFuZ2UKLSAgOzsgQ2Fs bGVkIGZyb20gYGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMnLgotICA7OyBGb250aWZ5IHRoZSBjdXJy ZW50IGNoYW5nZS4KLSAgIydmb250LWxvY2stYWZ0ZXItY2hhbmdlLWZ1bmN0aW9uKQotCi0oZGVm dW4gbGF6eS1sb2NrLWZvbnRpZnktcmVzdC1hZnRlci1jaGFuZ2UgKGJlZyBlbmQgb2xkLWxlbikK LSAgOzsgQ2FsbGVkIGZyb20gYGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMnLgotICA7OyBGb250aWZ5 IHRoZSBjdXJyZW50IGNoYW5nZSBhbmQgZGVmZXIgZm9udGlmaWNhdGlvbiBvZiB0aGUgcmVzdCBv ZiB0aGUKLSAgOzsgYnVmZmVyLiAgU2F2ZSB0aGUgY3VycmVudCBidWZmZXIgc28gdGhhdCB3ZSBz dWJzZXF1ZW50bHkgZm9udGlmeSBpbiBhbGwKLSAgOzsgd2luZG93cyBzaG93aW5nIHRoZSBidWZm ZXIuCi0gIChsYXp5LWxvY2stZm9udGlmeS1saW5lLWFmdGVyLWNoYW5nZSBiZWcgZW5kIG9sZC1s ZW4pCi0gICh3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zCi0gICAgKHVubGVzcyAobWVtcSAoY3Vy cmVudC1idWZmZXIpIGxhenktbG9jay1idWZmZXJzKQotICAgICAgKHB1c2ggKGN1cnJlbnQtYnVm ZmVyKSBsYXp5LWxvY2stYnVmZmVycykpCi0gICAgKHNhdmUtcmVzdHJpY3Rpb24KLSAgICAgICh3 aWRlbikKLSAgICAgIChyZW1vdmUtdGV4dC1wcm9wZXJ0aWVzIGVuZCAocG9pbnQtbWF4KSAnKGxh enktbG9jayBuaWwpKSkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLWRlZmVyLWxpbmUtYWZ0ZXItY2hh bmdlIChiZWcgZW5kIF9vbGQtbGVuKQotICA7OyBDYWxsZWQgZnJvbSBgYWZ0ZXItY2hhbmdlLWZ1 bmN0aW9ucycuCi0gIDs7IERlZmVyIGZvbnRpZmljYXRpb24gb2YgdGhlIGN1cnJlbnQgY2hhbmdl LiAgU2F2ZSB0aGUgY3VycmVudCBidWZmZXIgc28KLSAgOzsgdGhhdCB3ZSBzdWJzZXF1ZW50bHkg Zm9udGlmeSBpbiBhbGwgd2luZG93cyBzaG93aW5nIHRoZSBidWZmZXIuCi0gICh3aXRoLXNpbGVu dC1tb2RpZmljYXRpb25zCi0gICAgKHVubGVzcyAobWVtcSAoY3VycmVudC1idWZmZXIpIGxhenkt bG9jay1idWZmZXJzKQotICAgICAgKHB1c2ggKGN1cnJlbnQtYnVmZmVyKSBsYXp5LWxvY2stYnVm ZmVycykpCi0gICAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgKG1heCAoMS0gYmVnKSAocG9pbnQt bWluKSkKLQkJCSAgICAobWluICgxKyBlbmQpIChwb2ludC1tYXgpKQotCQkJICAgICcobGF6eS1s b2NrIG5pbCkpKSkKLQotKGRlZnVuIGxhenktbG9jay1kZWZlci1yZXN0LWFmdGVyLWNoYW5nZSAo YmVnIF9lbmQgX29sZC1sZW4pCi0gIDs7IENhbGxlZCBmcm9tIGBhZnRlci1jaGFuZ2UtZnVuY3Rp b25zJy4KLSAgOzsgRGVmZXIgZm9udGlmaWNhdGlvbiBvZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVy LiAgU2F2ZSB0aGUgY3VycmVudCBidWZmZXIgc28KLSAgOzsgdGhhdCB3ZSBzdWJzZXF1ZW50bHkg Zm9udGlmeSBpbiBhbGwgd2luZG93cyBzaG93aW5nIHRoZSBidWZmZXIuCi0gICh3aXRoLXNpbGVu dC1tb2RpZmljYXRpb25zCi0gICAgKHVubGVzcyAobWVtcSAoY3VycmVudC1idWZmZXIpIGxhenkt bG9jay1idWZmZXJzKQotICAgICAgKHB1c2ggKGN1cnJlbnQtYnVmZmVyKSBsYXp5LWxvY2stYnVm ZmVycykpCi0gICAgKHNhdmUtcmVzdHJpY3Rpb24KLSAgICAgICh3aWRlbikKLSAgICAgIChyZW1v dmUtdGV4dC1wcm9wZXJ0aWVzIChtYXggKDEtIGJlZykgKHBvaW50LW1pbikpCi0JCQkgICAgICAo cG9pbnQtbWF4KQotCQkJICAgICAgJyhsYXp5LWxvY2sgbmlsKSkpKSkKLQotOzsgMy4gIERlZmVy cmVkIGZvbnRpZmljYXRpb24gYW5kIHN0ZWFsdGggZm9udGlmaWNhdGlvbiBhcmUgZG9uZSBmcm9t IHRoZXNlIHR3bwotOzsgICAgIGZ1bmN0aW9ucy4gIFRoZXkgYXJlIHNldCB1cCBhcyBJZGxlIFRp bWVycy4KLQotKGRlZnVuIGxhenktbG9jay1mb250aWZ5LWFmdGVyLWRlZmVyICgpCi0gIDs7IENh bGxlZCBmcm9tIGB0aW1lci1pZGxlLWxpc3QnLgotICA7OyBGb250aWZ5IGFsbCB3aW5kb3dzIHdo ZXJlIGRlZmVycmFsIGhhcyBvY2N1cnJlZCBmb3IgaXRzIGJ1ZmZlci4KLSAgKHNhdmUtZXhjdXJz aW9uCi0gICAgKHdoaWxlIChhbmQgbGF6eS1sb2NrLWJ1ZmZlcnMgKG5vdCAoaW5wdXQtcGVuZGlu Zy1wKSkpCi0gICAgICAobGV0ICgoYnVmZmVyIChjYXIgbGF6eS1sb2NrLWJ1ZmZlcnMpKSB3aW5k b3dzKQotCTs7IFBhcmFub2lhOiBjaGVjayB0aGF0IHRoZSBidWZmZXIgaXMgc3RpbGwgbGl2ZSBh bmQgTGF6eSBMb2NrIG1vZGUgb24uCi0JKHdoZW4gKGJ1ZmZlci1saXZlLXAgYnVmZmVyKQotCSAg KHNldC1idWZmZXIgYnVmZmVyKQotCSAgKHdoZW4gbGF6eS1sb2NrLW1vZGUKLQkgICAgKHNldHEg d2luZG93cyAoZ2V0LWJ1ZmZlci13aW5kb3ctbGlzdCBidWZmZXIgJ25vbWluaSB0KSkKLQkgICAg KHdoaWxlIHdpbmRvd3MKLQkgICAgICAobGF6eS1sb2NrLWZvbnRpZnktd2luZG93IChjYXIgd2lu ZG93cykpCi0JICAgICAgKHNldHEgd2luZG93cyAoY2RyIHdpbmRvd3MpKSkpKQotCShzZXRxIGxh enktbG9jay1idWZmZXJzIChjZHIgbGF6eS1sb2NrLWJ1ZmZlcnMpKSkpKQotICA7OyBBZGQgaG9v ayBpZiBmb250aWZpY2F0aW9uIHNob3VsZCBub3cgYmUgZGVmZXItZHJpdmVuIGluIHRoaXMgYnVm ZmVyLgotICAod2hlbiAoYW5kIGxhenktbG9jay1tb2RlIGxhenktbG9jay1kZWZlci1vbi1zY3Jv bGxpbmcKLQkgICAgIChtZW1xICMnbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsIHdpbmRv dy1zY3JvbGwtZnVuY3Rpb25zKQotCSAgICAgKG5vdCAob3IgKGlucHV0LXBlbmRpbmctcCkgKGxh enktbG9jay11bmZvbnRpZmllZC1wKSkpKQotICAgIChyZW1vdmUtaG9vayAnd2luZG93LXNjcm9s bC1mdW5jdGlvbnMgIydsYXp5LWxvY2stZm9udGlmeS1hZnRlci1zY3JvbGwgdCkKLSAgICAoYWRk LWhvb2sgJ3dpbmRvdy1zY3JvbGwtZnVuY3Rpb25zICMnbGF6eS1sb2NrLWRlZmVyLWFmdGVyLXNj cm9sbCBuaWwgdCkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItaWRsZSAoKQot ICA7OyBDYWxsZWQgZnJvbSBgdGltZXItaWRsZS1saXN0Jy4KLSAgOzsgRm9udGlmeSBhbGwgYnVm ZmVycyB0aGF0IG5lZWQgaXQsIHN0ZWFsdGhpbHkgd2hpbGUgaWRsZS4KLSAgKHVubGVzcyAob3Ig ZXhlY3V0aW5nLWtiZC1tYWNybyAod2luZG93LW1pbmlidWZmZXItcCAoc2VsZWN0ZWQtd2luZG93 KSkpCi0gICAgOzsgTG9vcCBvdmVyIGFsbCBidWZmZXJzLCBmb250aWZ5IHN0ZWFsdGhpbHkgZm9y IGVhY2ggaWYgbmVjZXNzYXJ5LgotICAgIChsZXQgKChidWZmZXJzIChidWZmZXItbGlzdCkpIChj b250aW51ZSB0KQotCSAgbWVzc2FnZSBtZXNzYWdlLWxvZy1tYXggbWluaWJ1ZmZlci1hdXRvLXJh aXNlKQotICAgICAgKHNhdmUtZXhjdXJzaW9uCi0JKGRvLXdoaWxlIChhbmQgYnVmZmVycyBjb250 aW51ZSkKLQkgIChzZXQtYnVmZmVyIChjYXIgYnVmZmVycykpCi0JICAoaWYgKG5vdCAoYW5kIGxh enktbG9jay1tb2RlIChsYXp5LWxvY2stdW5mb250aWZpZWQtcCkpKQotCSAgICAgIChzZXRxIGNv bnRpbnVlIChub3QgKGlucHV0LXBlbmRpbmctcCkpKQotCSAgICA7OyBGb250aWZ5IHJlZ2lvbnMg aW4gdGhpcyBidWZmZXIgd2hpbGUgdGhlcmUgaXMgbm8gaW5wdXQuCi0JICAgICh3aXRoLXRlbXAt bWVzc2FnZQotCQkod2hlbiBsYXp5LWxvY2stc3RlYWx0aC12ZXJib3NlCi0JCSAgIkZvbnRpZnlp bmcgc3RlYWx0aGlseS4uLiIpCi0JICAgICAgKGRvLXdoaWxlIChhbmQgKGxhenktbG9jay11bmZv bnRpZmllZC1wKSBjb250aW51ZSkKLQkJKGlmIChhbmQgbGF6eS1sb2NrLXN0ZWFsdGgtbG9hZAot CQkJICg+IChjYXIgKGxvYWQtYXZlcmFnZSkpIGxhenktbG9jay1zdGVhbHRoLWxvYWQpKQotCQkg ICAgOzsgV2FpdCBhIHdoaWxlIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIGxvb3AuCi0JCSAg ICAocHJvZ24KLQkJICAgICAgKHdoZW4gbWVzc2FnZQotCQkJKG1lc3NhZ2UgIkZvbnRpZnlpbmcg c3RlYWx0aGlseS4uLnN1c3BlbmRlZCIpCi0JCQkoc2V0cSBtZXNzYWdlIG5pbCkpCi0JCSAgICAg IChzZXRxIGNvbnRpbnVlIChzaXQtZm9yIChvciBsYXp5LWxvY2stc3RlYWx0aC10aW1lIDMwKSkp KQotCQkgIDs7IEZvbnRpZnkgYSBjaHVuay4KLQkJICAod2hlbiBsYXp5LWxvY2stc3RlYWx0aC12 ZXJib3NlCi0JCSAgICAoaWYgbWVzc2FnZQotCQkJKG1lc3NhZ2UgIkZvbnRpZnlpbmcgc3RlYWx0 aGlseS4uLiAlMmQlJSBvZiAlcyIKLQkJCQkgKGxhenktbG9jay1wZXJjZW50LWZvbnRpZmllZCkg KGJ1ZmZlci1uYW1lKSkKLQkJICAgICAgKG1lc3NhZ2UgIkZvbnRpZnlpbmcgc3RlYWx0aGlseS4u LiIpCi0JCSAgICAgIChzZXRxIG1lc3NhZ2UgdCkpKQotCQkgIDs7IEN1cnJlbnQgYnVmZmVyIG1h eSBoYXZlIGNoYW5nZWQgZHVyaW5nIGBzaXQtZm9yJy4KLQkJICAoc2V0LWJ1ZmZlciAoY2FyIGJ1 ZmZlcnMpKQotCQkgIChsYXp5LWxvY2stZm9udGlmeS1jaHVuaykKLQkJICAoc2V0cSBjb250aW51 ZSAoc2l0LWZvciAob3IgbGF6eS1sb2NrLXN0ZWFsdGgtbmljZSAwKSkpKSkpKQotCSAgKHNldHEg YnVmZmVycyAoY2RyIGJ1ZmZlcnMpKSkpKSkpCi0KLTs7IDQuICBTcGVjaWFsIGNpcmN1bXN0YW5j ZXMuCi0KLShkZWZ1biBsYXp5LWxvY2stZm9udGlmeS1hZnRlci12aXNhZ2UgKCkKLSAgOzsgQ2Fs bGVkIGZyb20gYG91dGxpbmUtdmlldy1jaGFuZ2UtaG9vaycgYW5kIGBocy1oaWRlLWhvb2snLgot ICA7OyBGb250aWZ5IHdpbmRvd3Mgc2hvd2luZyB0aGUgY3VycmVudCBidWZmZXIsIGFzIGl0cyB2 aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLgotICA7OyBUaGlzIGlzIGEgY29uc3BpcmFjeSBoYWNrIGJl dHdlZW4gbGF6eS1sb2NrLmVsLCBvdXRsaW5lLmVsIGFuZAotICA7OyBoaWRlc2hvdy5lbC4KLSAg KGxldCAoKHdpbmRvd3MgKGdldC1idWZmZXItd2luZG93LWxpc3QgKGN1cnJlbnQtYnVmZmVyKSAn bm9taW5pIHQpKSkKLSAgICAod2hpbGUgd2luZG93cwotICAgICAgKGxhenktbG9jay1mb250aWZ5 LWNvbnNlcnZhdGl2ZWx5IChjYXIgd2luZG93cykpCi0gICAgICAoc2V0cSB3aW5kb3dzIChjZHIg d2luZG93cykpKSkpCi0KLShkZWZ1biBsYXp5LWxvY2stYWZ0ZXItZm9udGlmeS1idWZmZXIgKCkK LSAgOzsgQ2FsbGVkIGZyb20gYGZvbnQtbG9jay1hZnRlci1mb250aWZ5LWJ1ZmZlcicuCi0gIDs7 IE1hcmsgdGhlIGN1cnJlbnQgYnVmZmVyIGFzIGZvbnRpZmllZC4KLSAgOzsgVGhpcyBpcyBhIGNv bnNwaXJhY3kgaGFjayBiZXR3ZWVuIGxhenktbG9jay5lbCBhbmQgZm9udC1sb2NrLmVsLgotICAo d2l0aC1zaWxlbnQtbW9kaWZpY2F0aW9ucwotICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIChwb2lu dC1taW4pIChwb2ludC1tYXgpICcobGF6eS1sb2NrIHQpKSkpCi0KLShkZWZ1biBsYXp5LWxvY2st YWZ0ZXItdW5mb250aWZ5LWJ1ZmZlciAoKQotICA7OyBDYWxsZWQgZnJvbSBgZm9udC1sb2NrLWFm dGVyLXVuZm9udGlmeS1idWZmZXInLgotICA7OyBNYXJrIHRoZSBjdXJyZW50IGJ1ZmZlciBhcyB1 bmZvbnRpZmllZC4KLSAgOzsgVGhpcyBpcyBhIGNvbnNwaXJhY3kgaGFjayBiZXR3ZWVuIGxhenkt bG9jay5lbCBhbmQgZm9udC1sb2NrLmVsLgotICAod2l0aC1zaWxlbnQtbW9kaWZpY2F0aW9ucwot ICAgIChyZW1vdmUtdGV4dC1wcm9wZXJ0aWVzIChwb2ludC1taW4pIChwb2ludC1tYXgpICcobGF6 eS1sb2NrIG5pbCkpKSkKLQwKLTs7IEZvbnRpZmljYXRpb24gZnVuY3Rpb25zLgotCi07OyBJZiBw YWNrYWdlcyB3YW50IHRvIGVuc3VyZSB0aGF0IHNvbWUgcmVnaW9uIG9mIHRoZSBidWZmZXIgaXMg Zm9udGlmaWVkLCB0aGV5Ci07OyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24uICBGb3IgYW4gZXhh bXBsZSwgc2VlIHBzLXByaW50LmVsLgotKGRlZnVuIGxhenktbG9jay1mb250aWZ5LXJlZ2lvbiAo YmVnIGVuZCkKLSAgOzsgRm9udGlmeSBiZXR3ZWVuIEJFRyBhbmQgRU5ELCB3aGVyZSBuZWNlc3Nh cnksIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KLSAgKHNhdmUtcmVzdHJpY3Rpb24KLSAgICAod2lk ZW4pCi0gICAgKHdoZW4gKHNldHEgYmVnICh0ZXh0LXByb3BlcnR5LWFueSBiZWcgZW5kICdsYXp5 LWxvY2sgbmlsKSkKLSAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCSh3aXRoLXNpbGVudC1tb2RpZmlj YXRpb25zCi0JICAobGV0ICgoaW5oaWJpdC1wb2ludC1tb3Rpb24taG9va3MgdCkpCi0JICAgIDs7 IEZpbmQgc3VjY2Vzc2l2ZSB1bmZvbnRpZmllZCByZWdpb25zIGJldHdlZW4gQkVHIGFuZCBFTkQu Ci0JICAgIChjb25kaXRpb24tY2FzZSBkYXRhCi0JCShkby13aGlsZSBiZWcKLQkJICAobGV0ICgo bmV4dCAob3IgKHRleHQtcHJvcGVydHktYW55IGJlZyBlbmQgJ2xhenktbG9jayB0KQotCQkgICAg ICAgICAgICAgICAgICBlbmQpKSkKLQkJICAgIDs7IE1ha2Ugc3VyZSB0aGUgcmVnaW9uIGVuZCBw b2ludHMgYXJlIGF0IGJlZ2lubmluZyBvZiBsaW5lLgotCQkgICAgKGdvdG8tY2hhciBiZWcpCi0J CSAgICAodW5sZXNzIChib2xwKQotCQkgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0JCSAgICAg IChzZXRxIGJlZyAocG9pbnQpKSkKLQkJICAgIChnb3RvLWNoYXIgbmV4dCkKLQkJICAgICh1bmxl c3MgKGJvbHApCi0JCSAgICAgIChmb3J3YXJkLWxpbmUpCi0JCSAgICAgIChzZXRxIG5leHQgKHBv aW50KSkpCi0JCSAgICA7OyBGb250aWZ5IHRoZSByZWdpb24sIHRoZW4gZmxhZyBpdCBhcyBmb250 aWZpZWQuCi0JCSAgICAoZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uIGJlZyBuZXh0KQotCQkgICAg KGFkZC10ZXh0LXByb3BlcnRpZXMgYmVnIG5leHQgJyhsYXp5LWxvY2sgdCkpCi0JCSAgICAoc2V0 cSBiZWcgKHRleHQtcHJvcGVydHktYW55IG5leHQgZW5kICdsYXp5LWxvY2sgbmlsKSkpKQotCSAg ICAgICgoZXJyb3IgcXVpdCkgKG1lc3NhZ2UgIkZvbnRpZnlpbmcgcmVnaW9uLi4uJXMiIGRhdGEp KSkpKSkpKSkKLQotKGRlZnVuIGxhenktbG9jay1mb250aWZ5LWNodW5rICgpCi0gIDs7IEZvbnRp ZnkgdGhlIG5lYXJlc3QgY2h1bmssIGZvciBzdGVhbHRoLCBpbiB0aGUgY3VycmVudCBidWZmZXIu Ci0gIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcyB0KSkKLSAgICAoc2F2ZS1leGN1 cnNpb24KLSAgICAgIChzYXZlLXJlc3RyaWN0aW9uCi0JKHdpZGVuKQotCTs7IE1vdmUgdG8gZW5k IG9mIGxpbmUgaW4gY2FzZSB0aGUgY2hhcmFjdGVyIGF0IHBvaW50IGlzIG5vdCBmb250aWZpZWQu Ci0JKGVuZC1vZi1saW5lKQotCTs7IEZpbmQgd2hlcmUgdGhlIHByZXZpb3VzIChuZXh0KSB1bmZv bnRpZmllZCByZWdpb25zIGVuZCAoYmVnaW4pLgotCShsZXQgKChwcmV2IChwcmV2aW91cy1zaW5n bGUtcHJvcGVydHktY2hhbmdlIChwb2ludCkgJ2xhenktbG9jaykpCi0JICAgICAgKG5leHQgKHRl eHQtcHJvcGVydHktYW55IChwb2ludCkgKHBvaW50LW1heCkgJ2xhenktbG9jayBuaWwpKSkKLQkg IDs7IEZvbnRpZnkgZnJvbSB0aGUgbmVhcmVzdCB1bmZvbnRpZmllZCBwb3NpdGlvbi4KLQkgIChp ZiAob3IgKG51bGwgcHJldikgKGFuZCBuZXh0ICg8ICgtIG5leHQgKHBvaW50KSkgKC0gKHBvaW50 KSBwcmV2KSkpKQotCSAgICAgIDs7IFRoZSBuZXh0LCBvciBuZWl0aGVyLCByZWdpb24gaXMgdGhl IG5lYXJlc3Qgbm90IGZvbnRpZmllZC4KLQkgICAgICAobGF6eS1sb2NrLWZvbnRpZnktcmVnaW9u Ci0JICAgICAgIChwcm9nbiAoZ290by1jaGFyIChvciBuZXh0IChwb2ludC1taW4pKSkKLQkJICAg ICAgKGJlZ2lubmluZy1vZi1saW5lKQotCQkgICAgICAocG9pbnQpKQotCSAgICAgICAocHJvZ24g KGdvdG8tY2hhciAob3IgbmV4dCAocG9pbnQtbWluKSkpCi0JCSAgICAgIChmb3J3YXJkLWxpbmUg bGF6eS1sb2NrLXN0ZWFsdGgtbGluZXMpCi0JCSAgICAgIChwb2ludCkpKQotCSAgICA7OyBUaGUg cHJldmlvdXMgcmVnaW9uIGlzIHRoZSBuZWFyZXN0IG5vdCBmb250aWZpZWQuCi0JICAgIChsYXp5 LWxvY2stZm9udGlmeS1yZWdpb24KLQkgICAgIChwcm9nbiAoZ290by1jaGFyIHByZXYpCi0JCSAg ICAoZm9yd2FyZC1saW5lICgtIGxhenktbG9jay1zdGVhbHRoLWxpbmVzKSkKLQkJICAgIChwb2lu dCkpCi0JICAgICAocHJvZ24gKGdvdG8tY2hhciBwcmV2KQotCQkgICAgKGZvcndhcmQtbGluZSkK LQkJICAgIChwb2ludCkpKSkpKSkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLWZvbnRpZnktd2luZG93 ICh3aW5kb3cpCi0gIDs7IEZvbnRpZnkgaW4gV0lORE9XIGJldHdlZW4gYHdpbmRvdy1zdGFydCcg YW5kIGB3aW5kb3ctZW5kJy4KLSAgOzsgV2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIGNhbiB1 c2UgYHdpbmRvdy1zdGFydCcgYW5kIGB3aW5kb3ctZW5kJy4KLSAgKHdpdGgtY3VycmVudC1idWZm ZXIgKHdpbmRvdy1idWZmZXIgd2luZG93KQotICAgIChsYXp5LWxvY2stZm9udGlmeS1yZWdpb24g KHdpbmRvdy1zdGFydCB3aW5kb3cpICh3aW5kb3ctZW5kIHdpbmRvdykpKSkKLQotKGRlZnVuIGxh enktbG9jay1mb250aWZ5LWNvbnNlcnZhdGl2ZWx5ICh3aW5kb3cpCi0gIDs7IEZvbnRpZnkgaW4g V0lORE9XIGNvbnNlcnZhdGl2ZWx5IGFyb3VuZCBwb2ludC4KLSAgOzsgV2hlcmUgd2UgY2Fubm90 IHVzZSBgd2luZG93LXN0YXJ0JyBhbmQgYHdpbmRvdy1lbmQnIHdlIGRvIGB3aW5kb3ctaGVpZ2h0 JwotICA7OyBsaW5lcyBhcm91bmQgcG9pbnQuICBUaGF0IHdheSB3ZSBndWFyYW50ZWUgdG8gaGF2 ZSBkb25lIGVub3VnaC4KLSAgKHdpdGgtY3VycmVudC1idWZmZXIgKHdpbmRvdy1idWZmZXIgd2lu ZG93KQotICAgIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcyB0KSkKLSAgICAgIChs YXp5LWxvY2stZm9udGlmeS1yZWdpb24KLSAgICAgICAoc2F2ZS1leGN1cnNpb24KLQkgKGdvdG8t Y2hhciAod2luZG93LXBvaW50IHdpbmRvdykpCi0JICh2ZXJ0aWNhbC1tb3Rpb24gKC0gKHdpbmRv dy1oZWlnaHQgd2luZG93KSkgd2luZG93KSAocG9pbnQpKQotICAgICAgIChzYXZlLWV4Y3Vyc2lv bgotCSAoZ290by1jaGFyICh3aW5kb3ctcG9pbnQgd2luZG93KSkKLQkgKHZlcnRpY2FsLW1vdGlv biAod2luZG93LWhlaWdodCB3aW5kb3cpIHdpbmRvdykgKHBvaW50KSkpKSkpCi0KLShkZWZ1biBs YXp5LWxvY2stdW5mb250aWZpZWQtcCAoKQotICA7OyBSZXR1cm4gbm9uLW5pbCBpZiB0aGVyZSBp cyBhbnl3aGVyZSBzdGlsbCB0byBiZSBmb250aWZpZWQuCi0gIChzYXZlLXJlc3RyaWN0aW9uCi0g ICAgKHdpZGVuKQotICAgICh0ZXh0LXByb3BlcnR5LWFueSAocG9pbnQtbWluKSAocG9pbnQtbWF4 KSAnbGF6eS1sb2NrIG5pbCkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLXBlcmNlbnQtZm9udGlmaWVk ICgpCi0gIDs7IFJldHVybiB0aGUgcGVyY2VudGFnZSAob2YgY2hhcmFjdGVycykgb2YgdGhlIGJ1 ZmZlciB0aGF0IGFyZSBmb250aWZpZWQuCi0gIChzYXZlLXJlc3RyaWN0aW9uCi0gICAgKHdpZGVu KQotICAgIChsZXQgKChiZWcgKHBvaW50LW1pbikpIChzaXplIDApIG5leHQpCi0gICAgICA7OyBG aW5kIHdoZXJlIHRoZSBuZXh0IGZvbnRpZmllZCByZWdpb24gYmVnaW5zLgotICAgICAgKHdoaWxl IChzZXRxIGJlZyAodGV4dC1wcm9wZXJ0eS1hbnkgYmVnIChwb2ludC1tYXgpICdsYXp5LWxvY2sg dCkpCi0JKHNldHEgbmV4dCAob3IgKHRleHQtcHJvcGVydHktYW55IGJlZyAocG9pbnQtbWF4KSAn bGF6eS1sb2NrIG5pbCkKLQkJICAgICAgIChwb2ludC1tYXgpKSkKLQkoY2wtaW5jZiBzaXplICgt IG5leHQgYmVnKSkKLQkoc2V0cSBiZWcgbmV4dCkpCi0gICAgICA7OyBGbG9hdCBiZWNhdXNlIHVz aW5nIGludGVnZXIgbXVsdGlwbGljYXRpb24gd2lsbCBmcmVxdWVudGx5IG92ZXJmbG93LgotICAg ICAgKHRydW5jYXRlICgqICgvIChmbG9hdCBzaXplKSAocG9pbnQtbWF4KSkgMTAwKSkpKSkKLQwK LTs7IFZlcnNpb24gZGVwZW5kZW50IHdvcmthcm91bmRzIGFuZCBmaXhlcy4KLQotKHdoZW4gKGNv bnNwIGxhenktbG9jay1kZWZlci10aW1lKQotICA7OwotICA7OyBJbiAyLjA2LjA0IGFuZCBiZWxv dywgYGxhenktbG9jay1kZWZlci10aW1lJyBjb3VsZCBzcGVjaWZ5IG1vZGVzIGFuZCB0aW1lLgot ICAod2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXIgIipIZWxwKiIKLSAgICAocHJpbmMgIlRoZSB2 YWx1ZSBvZiB0aGUgdmFyaWFibGUgYGxhenktbG9jay1kZWZlci10aW1lJyB3YXNcbiAiKQotICAg IChwcmluYyBsYXp5LWxvY2stZGVmZXItdGltZSkKLSAgICAocHJpbmMgIlxuIikKLSAgICAocHJp bmMgIlRoaXMgdmFyaWFibGUgY2Fubm90IG5vdyBiZSBhIGxpc3Qgb2YgbW9kZXMgYW5kIHRpbWUs XG4iKQotICAgIChwcmluYyAic28gaW5zdGVhZCB1c2UgIikKLSAgICAocHJpbmMgKHN1YnN0aXR1 dGUtY29tbWFuZC1rZXlzICJcXFtjdXN0b21pemUtb3B0aW9uXSIpKQotICAgIChwcmluYyAiIHRv IG1vZGlmeSB0aGUgdmFyaWFibGVzLCBvciBwdXQgdGhlIGZvcm1zOlxuIikKLSAgICAocHJpbmMg IiAoc2V0cSBsYXp5LWxvY2stZGVmZXItdGltZSAiKQotICAgIChwcmluYyAoY2RyIGxhenktbG9j ay1kZWZlci10aW1lKSkKLSAgICAocHJpbmMgIilcbiIpCi0gICAgKHByaW5jICIgKHNldHEgbGF6 eS1sb2NrLWRlZmVyLW9uLXRoZS1mbHkgJyIpCi0gICAgKHByaW5jIChjYXIgbGF6eS1sb2NrLWRl ZmVyLXRpbWUpKQotICAgIChwcmluYyAiKVxuIikKLSAgICAocHJpbmMgImluIHlvdXIgfi8uZW1h Y3MuICAiKQotICAgIChwcmluYyAiVGhlIGFib3ZlIGZvcm1zIGhhdmUgYmVlbiBldmFsdWF0ZWQg Zm9yIHRoaXMgZWRpdG9yIHNlc3Npb24sXG4iKQotICAgIChwcmluYyAiYnV0IHlvdSBzaG91bGQg dXNlICIpCi0gICAgKHByaW5jIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyAiXFxbY3VzdG9taXpl LW9wdGlvbl0iKSkKLSAgICAocHJpbmMgIiBvciBjaGFuZ2UgeW91ciB+Ly5lbWFjcyBub3cuIikp Ci0gIChzZXRxIGxhenktbG9jay1kZWZlci1vbi10aGUtZmx5IChjYXIgbGF6eS1sb2NrLWRlZmVy LXRpbWUpCi0JbGF6eS1sb2NrLWRlZmVyLXRpbWUgKGNkciBsYXp5LWxvY2stZGVmZXItdGltZSkp KQotCi0od2hlbiAoYm91bmRwICdsYXp5LWxvY2stZGVmZXItZHJpdmVuKQotICA7OwotICA7OyBJ biAyLjA2LjA0IGFuZCBiZWxvdywgYGxhenktbG9jay1kZWZlci1kcml2ZW4nIHdhcyB0aGUgdmFy aWFibGUgbmFtZS4KLSAgKHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyICIqSGVscCoiCi0gICAg KHByaW5jICJUaGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGBsYXp5LWxvY2stZGVmZXItZHJpdmVu JyBpcyBzZXQgdG8gIikKLSAgICAoaWYgKG1lbXEgbGF6eS1sb2NrLWRlZmVyLWRyaXZlbiAnKG5p bCB0KSkKLQkocHJpbmMgbGF6eS1sb2NrLWRlZmVyLWRyaXZlbikKLSAgICAgIChwcmluYyAiYCIp Ci0gICAgICAocHJpbmMgbGF6eS1sb2NrLWRlZmVyLWRyaXZlbikKLSAgICAgIChwcmluYyAiJyIp KQotICAgIChwcmluYyAiLlxuIikKLSAgICAocHJpbmMgIlRoaXMgdmFyaWFibGUgaXMgbm93IGNh bGxlZCBgbGF6eS1sb2NrLWRlZmVyLW9uLXNjcm9sbGluZycsXG4iKQotICAgIChwcmluYyAic28g aW5zdGVhZCB1c2UgIikKLSAgICAocHJpbmMgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzICJcXFtj dXN0b21pemUtb3B0aW9uXSIpKQotICAgIChwcmluYyAiIHRvIG1vZGlmeSB0aGUgdmFyaWFibGUs IG9yIHB1dCB0aGUgZm9ybTpcbiIpCi0gICAgKHByaW5jICIgKHNldHEgbGF6eS1sb2NrLWRlZmVy LW9uLXNjcm9sbGluZyAiKQotICAgICh1bmxlc3MgKG1lbXEgbGF6eS1sb2NrLWRlZmVyLWRyaXZl biAnKG5pbCB0KSkKLSAgICAgIChwcmluYyAiJyIpKQotICAgIChwcmluYyBsYXp5LWxvY2stZGVm ZXItZHJpdmVuKQotICAgIChwcmluYyAiKVxuIikKLSAgICAocHJpbmMgImluIHlvdXIgfi8uZW1h Y3MuICAiKQotICAgIChwcmluYyAiVGhlIGFib3ZlIGZvcm0gaGFzIGJlZW4gZXZhbHVhdGVkIGZv ciB0aGlzIGVkaXRvciBzZXNzaW9uLFxuIikKLSAgICAocHJpbmMgImJ1dCB5b3Ugc2hvdWxkIHVz ZSAiKQotICAgIChwcmluYyAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMgIlxcW2N1c3RvbWl6ZS1v cHRpb25dIikpCi0gICAgKHByaW5jICIgb3IgY2hhbmdlIHlvdXIgfi8uZW1hY3Mgbm93LiIpKQot ICAoc2V0cSBsYXp5LWxvY2stZGVmZXItb24tc2Nyb2xsaW5nIGxhenktbG9jay1kZWZlci1kcml2 ZW4pKQotDAotOzsgSW5zdGFsbCBvdXJzZWx2ZXM6Ci0KLShhZGQtaG9vayAnd2luZG93LXNpemUt Y2hhbmdlLWZ1bmN0aW9ucyAjJ2xhenktbG9jay1mb250aWZ5LWFmdGVyLXJlc2l6ZSkKLShhZGQt aG9vayAncmVkaXNwbGF5LWVuZC10cmlnZ2VyLWZ1bmN0aW9ucyAjJ2xhenktbG9jay1mb250aWZ5 LWFmdGVyLXRyaWdnZXIpCi0KLSh1bmxlc3MgKGFzc3EgJ2xhenktbG9jay1tb2RlIG1pbm9yLW1v ZGUtYWxpc3QpCi0gIChzZXRxIG1pbm9yLW1vZGUtYWxpc3QgKGFwcGVuZCBtaW5vci1tb2RlLWFs aXN0ICcoKGxhenktbG9jay1tb2RlIG5pbCkpKSkpCi0KLShwcm92aWRlICdsYXp5LWxvY2spCi0K LTs7IExvY2FsIFZhcmlhYmxlczoKLTs7IGJ5dGUtY29tcGlsZS13YXJuaW5nczogKG5vdCBvYnNv bGV0ZSkKLTs7IEVuZDoKLQotOzs7IGxhenktbG9jay5lbCBlbmRzIGhlcmUKLS0gCjIuMzAuMgoK --00000000000068b7eb05e3c84fda--