Convert CAB name to MSI-compliant identifier when embedding

When CAB filename does not conform to MSI identifier, the filename must
not be used as a CAB ID directly.
This commit is contained in:
Simon Rozman 2018-09-07 10:39:06 +02:00
parent aa5314abcd
commit 3701db4606
2 changed files with 385 additions and 416 deletions

391
MSI.wsf
View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- <!--
Copyright 1991-2017 Amebis Copyright 1991-2018 Amebis
Copyright 2016 GÉANT Copyright 2016 GÉANT
This file is part of MSIBuild. This file is part of MSIBuild.
@ -280,6 +280,8 @@
dat.Close(); dat.Close();
} }
var cab_id = embed ? _MSI(cab_name) : cab_name;
view = database.OpenView("SELECT DiskId,LastSequence,Cabinet FROM Media ORDER BY DiskId"); view = database.OpenView("SELECT DiskId,LastSequence,Cabinet FROM Media ORDER BY DiskId");
view.Execute(); view.Execute();
record = view.Fetch(); record = view.Fetch();
@ -291,7 +293,7 @@
updateMode = msiViewModifyInsert; updateMode = msiViewModifyInsert;
} }
record.IntegerData(2) = lastSequence; record.IntegerData(2) = lastSequence;
record.StringData(3) = (embed ? "#" : "") + cab_name; record.StringData(3) = (embed ? "#" : "") + cab_id;
view.Modify(updateMode, record); view.Modify(updateMode, record);
sumInfo = database.SummaryInformation(3); sumInfo = database.SummaryInformation(3);
@ -304,7 +306,7 @@
view = database.OpenView("SELECT Name,Data FROM _Streams"); view = database.OpenView("SELECT Name,Data FROM _Streams");
view.Execute(); view.Execute();
record = installer.CreateRecord(2); record = installer.CreateRecord(2);
record.StringData(1) = cab_name; record.StringData(1) = cab_id;
record.SetStream(2, cab_path); record.SetStream(2, cab_path);
view.Modify(msiViewModifyAssign, record); view.Modify(msiViewModifyAssign, record);
} }
@ -632,216 +634,189 @@
</job> </job>
<signature> <signature>
** SIG ** MIIbIAYJKoZIhvcNAQcCoIIbETCCGw0CAQExCzAJBgUr ** SIG ** MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
** SIG ** DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB ** SIG ** DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
** SIG ** gjcCAR4wJAIBAQQQcAVhGs441BGiowAQS9NQkAIBAAIB ** SIG ** gjcCAR4wJAIBAQQQcAVhGs441BGiowAQS9NQkAIBAAIB
** SIG ** AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFPORRkYELKei ** SIG ** AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFATRESXJyaGX
** SIG ** 2y91UfATkJR3evmPoIIKLzCCBM4wggO2oAMCAQICEDB6 ** SIG ** /oZU9hdKMYpbl90HoIISyDCCA+4wggNXoAMCAQICEH6T
** SIG ** NnqqPmiBpvlPCMs7OWQwDQYJKoZIhvcNAQELBQAwfzEL ** SIG ** 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
** SIG ** MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENv ** SIG ** CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
** SIG ** cnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVz ** SIG ** cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
** SIG ** dCBOZXR3b3JrMTAwLgYDVQQDEydTeW1hbnRlYyBDbGFz ** SIG ** EwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZp
** SIG ** cyAzIFNIQTI1NiBDb2RlIFNpZ25pbmcgQ0EwHhcNMTUx ** SIG ** Y2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1w
** SIG ** MDA5MDAwMDAwWhcNMTgxMTA3MjM1OTU5WjBhMQswCQYD ** SIG ** aW5nIENBMB4XDTEyMTIyMTAwMDAwMFoXDTIwMTIzMDIz
** SIG ** VQQGEwJTSTERMA8GA1UECBMIU2xvdmVuaWExDzANBgNV ** SIG ** NTk1OVowXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
** SIG ** BAcTBkthbW5pazEWMBQGA1UEChQNQW1lYmlzIGQuby5v ** SIG ** bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
** SIG ** LjEWMBQGA1UEAxQNQW1lYmlzIGQuby5vLjCCASIwDQYJ ** SIG ** bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
** SIG ** KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJfy6Bdwx2kq ** SIG ** RzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
** SIG ** yGhtaYAZgcA8pWLe7EbyLqBHRq/8jIVfUX1CH7fsbEz1 ** SIG ** AQCxrLNJVEuXHBIK2CV5kSJXKm/cuCbEQ3Nrwr8uUFr7
** SIG ** UDgIq74BvilG3BNyjJxh/lbiu2Pr2M0ad3WEy4p0kM9T ** SIG ** FMJ2jkMBJUO0oeJF9Oi3e8N0zCLXtJQAAvdN7b+0t0Qk
** SIG ** SmABC8k3Vc5pmJlNy1++uMpNwAbUmbGcD6Igsvk1xPWb ** SIG ** a81fRTvRRM5DEnMXgotptCvLmR6schsmTXEfsTHd+1Fh
** SIG ** ApLoAdnO0KfTfzvRI40A0cGZVGt5y6GPemN6jT8JAp9O ** SIG ** AlOmqvVJLAV4RaUvic7nmef+jOJXPz3GktxK+Hsz5HkK
** SIG ** KaWIqj3iF00c/FwS7ODZf2w/cMphLjUle+b86GyewVGE ** SIG ** +/B1iEGc/8UDUZmq12yfk2mHZSmDhcJgFMTIyTsU2sCB
** SIG ** MEVO5ZjS9ksEWBDWn9A6XYshSwbDWnx4xmIl0B4DcWVA ** SIG ** 8B8NdN6SIqvK9/t0fCfm90obf6fDni2uiuqm5qonFn1h
** SIG ** aY+zqEQzQbzEGC/izPDq44RiCtbhi+QqgQ/6fNXm3hbA ** SIG ** 95hxEbziUKFL5V365Q6nLJ+qZSDT2JboyHylTkhE/xni
** SIG ** GVcYPYa4J5D1UMO+1NC2cPMCAwEAAaOCAWIwggFeMAkG ** SIG ** RAeSC9dohIBdanhkRc1gRn5UwRN8xXnxycFxAgMBAAGj
** SIG ** A1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeAMCsGA1UdHwQk ** SIG ** gfowgfcwHQYDVR0OBBYEFF+a9W5czMx0mtTdfe8/2+xM
** SIG ** MCIwIKAeoByGGmh0dHA6Ly9zdi5zeW1jYi5jb20vc3Yu ** SIG ** gC7dMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYW
** SIG ** Y3JsMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAj ** SIG ** aHR0cDovL29jc3AudGhhd3RlLmNvbTASBgNVHRMBAf8E
** SIG ** BggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9j ** SIG ** CDAGAQH/AgEAMD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6
** SIG ** cHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9kLnN5bWNi ** SIG ** Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVUaW1lc3RhbXBp
** SIG ** LmNvbS9ycGEwEwYDVR0lBAwwCgYIKwYBBQUHAwMwVwYI ** SIG ** bmdDQS5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDgYD
** SIG ** KwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8v ** SIG ** VR0PAQH/BAQDAgEGMCgGA1UdEQQhMB+kHTAbMRkwFwYD
** SIG ** c3Yuc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8v ** SIG ** VQQDExBUaW1lU3RhbXAtMjA0OC0xMA0GCSqGSIb3DQEB
** SIG ** c3Yuc3ltY2IuY29tL3N2LmNydDAfBgNVHSMEGDAWgBSW ** SIG ** BQUAA4GBAAMJm495739ZMKrvaLX64wkdu0+CBl03X6ZS
** SIG ** O1PweTOXr32D7y4rzMq3hh5yZjAdBgNVHQ4EFgQU9we9 ** SIG ** nxaN6hySCURu9W3rWHww6PlpjSNzCxJvR6muORH4KrGb
** SIG ** loCaLXTEfww9PSfd1JAKn8wwDQYJKoZIhvcNAQELBQAD ** SIG ** sBrDjutZlgCtzgxNstAxpghcKnr84nodV0yoZRjpeUBi
** SIG ** ggEBAIpxL0AvtcrbShLKgI7dmLn6WJbpdzkB9e2Cm1Mu ** SIG ** JZZux8c3aoMhCI5B6t3ZVz8dd0mHKhYGXqY4aiISo1EZ
** SIG ** AAIiogLFF1n07l0VXZE+gqxGHB8ji2h33t+o1R8PLyyI ** SIG ** g362MIIEozCCA4ugAwIBAgIQDs/0OMj+vzVuBNhqmBsa
** SIG ** kdnMhHAd78HsqyZzabfmWuCP12TKBv77wiZkpbTo/Av+ ** SIG ** UDANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJVUzEd
** SIG ** z0SlpJRoMpzzXhyPPtHdby80bSu+4RXlewiDCH56aGE4 ** SIG ** MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xMDAu
** SIG ** SSk0i8Xa9JJ/ozPKLX3Szdmg6J58XtDH/tq5K1/ABSCB ** SIG ** BgNVBAMTJ1N5bWFudGVjIFRpbWUgU3RhbXBpbmcgU2Vy
** SIG ** z6SF2Y9l9lRJpGXchSDYCPipSVUGP0WPQRTDNobSwCJD ** SIG ** dmljZXMgQ0EgLSBHMjAeFw0xMjEwMTgwMDAwMDBaFw0y
** SIG ** XAz9UFcxWo4Rh8o/gvlLWUH+T3HhmLSRzXqt3JuqJo5x ** SIG ** MDEyMjkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMR0wGwYD
** SIG ** H8s4vPzcGBZZFob8yRB98KD6ioFK2pjRRSw9FucwggVZ ** SIG ** VQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjE0MDIGA1UE
** SIG ** MIIEQaADAgECAhA9eNf5dklgsmF99PAeyoYqMA0GCSqG ** SIG ** AxMrU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNl
** SIG ** SIb3DQEBCwUAMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UE ** SIG ** cyBTaWduZXIgLSBHNDCCASIwDQYJKoZIhvcNAQEBBQAD
** SIG ** ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT ** SIG ** ggEPADCCAQoCggEBAKJjCzlEuLsjp0RJuw7/ofBhClOT
** SIG ** aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAy ** SIG ** sJjbrSwPSsVu/4Y8U1UPFc4EPyv9qZaW2b5heQtbyUyG
** SIG ** MDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6 ** SIG ** duXgQ0sile7CK0PBn9hotI5AT+6FOLkRxSPyZFjwFTJv
** SIG ** ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENs ** SIG ** TlehroikAtcqHs1L4d1j1ReJMluwXplaqJ0oUA4X7pbb
** SIG ** YXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlv ** SIG ** YTtFUR3PElYLkkf8q672Zj1HrHBy55LnX80QucSDZJQZ
** SIG ** biBBdXRob3JpdHkgLSBHNTAeFw0xMzEyMTAwMDAwMDBa ** SIG ** vSWA4ejSIqXQugJ6oXeTW2XD7hd0vEGGKtwITIySjJEt
** SIG ** Fw0yMzEyMDkyMzU5NTlaMH8xCzAJBgNVBAYTAlVTMR0w ** SIG ** nndEH2jWqHR32w5bMotWizO92WPISZ06xcXqMwvS8aMb
** SIG ** GwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0G ** SIG ** 9Iu+2bNXizveBKd6IrIkri7HcMW+ToMmCPsLvalPmQjh
** SIG ** A1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEwMC4G ** SIG ** EChyqs0CAwEAAaOCAVcwggFTMAwGA1UdEwEB/wQCMAAw
** SIG ** A1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBTSEEyNTYgQ29k ** SIG ** FgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/
** SIG ** ZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC ** SIG ** BAQDAgeAMHMGCCsGAQUFBwEBBGcwZTAqBggrBgEFBQcw
** SIG ** AQ8AMIIBCgKCAQEAl4MeABavLLHSCMTXaJNRYB5x9uJH ** SIG ** AYYeaHR0cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29t
** SIG ** tNtYTSNiarS/WhtR96MNGHdou9g2qy8hUNqe8+dfJ04L ** SIG ** MDcGCCsGAQUFBzAChitodHRwOi8vdHMtYWlhLndzLnN5
** SIG ** wpfICXCTqdpcDU6kDZGgtOwUzpFyVC7Oo9tE6VIbP0E8 ** SIG ** bWFudGVjLmNvbS90c3MtY2EtZzIuY2VyMDwGA1UdHwQ1
** SIG ** ykrkqsDoOatTzCHQzM9/m+bCzFhqghXuPTbPHMWXBySO ** SIG ** MDMwMaAvoC2GK2h0dHA6Ly90cy1jcmwud3Muc3ltYW50
** SIG ** 8Xu+MS09bty1mUKfS2GVXxxw7hd924vlYYl4x2gbrxF4 ** SIG ** ZWMuY29tL3Rzcy1jYS1nMi5jcmwwKAYDVR0RBCEwH6Qd
** SIG ** GpiuxFVHU9mzMtahDkZAxZeSitFTp5lbhTVX0+qTYmEg ** SIG ** MBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTIwHQYD
** SIG ** CscwdyQRTWKDtrp7aIIx7mXK3/nVjbI13Iwrb2pyXGCE ** SIG ** VR0OBBYEFEbGaaMOShQe1UzaUmMXP142vA3mMB8GA1Ud
** SIG ** nPIMlF7AVlIASMzT+KV93i/XE+Q4qITVRrgThsIbnepa ** SIG ** IwQYMBaAFF+a9W5czMx0mtTdfe8/2+xMgC7dMA0GCSqG
** SIG ** ON2b2wIDAQABo4IBgzCCAX8wLwYIKwYBBQUHAQEEIzAh ** SIG ** SIb3DQEBBQUAA4IBAQB4O7SRKgBM8I9iMDd4o4QnB28Y
** SIG ** MB8GCCsGAQUFBzABhhNodHRwOi8vczIuc3ltY2IuY29t ** SIG ** st4l3KDUlAOqhk4ln5pAAxzdzuN5yyFoBtq2MrRtv/Qs
** SIG ** MBIGA1UdEwEB/wQIMAYBAf8CAQAwbAYDVR0gBGUwYzBh ** SIG ** JmMz5ElkbQ3mw2cO9wWkNWx8iRbG6bLfsundIMZxD82V
** SIG ** BgtghkgBhvhFAQcXAzBSMCYGCCsGAQUFBwIBFhpodHRw ** SIG ** dNy2XN69Nx9DeOZ4tc0oBCCjqvFLxIgpkQ6A0RH83Vx2
** SIG ** Oi8vd3d3LnN5bWF1dGguY29tL2NwczAoBggrBgEFBQcC ** SIG ** bk9eDkVGQW4NsOo4mrE62glxEPwcebSAe6xp9P2ctgwW
** SIG ** AjAcGhpodHRwOi8vd3d3LnN5bWF1dGguY29tL3JwYTAw ** SIG ** K/F/Wwk9m1viFsoTgW0ALjgNqCmPLOGy9FqpAa8VnCwv
** SIG ** BgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2Iu ** SIG ** SRvbIrvD/niUUcOGsYKIXfA9tFGheTMrLnu53CAJE3Hr
** SIG ** Y29tL3BjYTMtZzUuY3JsMB0GA1UdJQQWMBQGCCsGAQUF ** SIG ** ahlbz+ilMFcsiUk/uc9/yb8+ImhjU5q9aXSsxR08f5Lg
** SIG ** BwMCBggrBgEFBQcDAzAOBgNVHQ8BAf8EBAMCAQYwKQYD ** SIG ** w7wc2AR1MIIEzjCCA7agAwIBAgIQMHo2eqo+aIGm+U8I
** SIG ** VR0RBCIwIKQeMBwxGjAYBgNVBAMTEVN5bWFudGVjUEtJ ** SIG ** yzs5ZDANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJV
** SIG ** LTEtNTY3MB0GA1UdDgQWBBSWO1PweTOXr32D7y4rzMq3
** SIG ** hh5yZjAfBgNVHSMEGDAWgBR/02Wnwt3su/AwCfNDOfoC
** SIG ** rzMxMzANBgkqhkiG9w0BAQsFAAOCAQEAE4UaHmmpN/eg
** SIG ** vaSvfh1hU/6djF4MpnUeeBcj3f3sGgNVOftxlcdlWqeO
** SIG ** MNJEWmHbcG/aIQXCLnO6SfHRk/5dyc1eA+CJnj90Htf3
** SIG ** OIup1s+7NS8zWKiSVtHITTuC5nmEFvwosLFH8x2iPu6H
** SIG ** 2aZ/pFalP62ELinefLyoqqM9BAHqupOiDlAiKRdMh+Q6
** SIG ** EV/WpCWJmwVrL7TJAUwnewusGQUioGAVP9rJ+01Mj/ty
** SIG ** Z3f9J5THujUOiEn+jf0or0oSvQ2zlwXeRAwV+jYrA9zB
** SIG ** UAHxoRFdFOXivSdLVL4rhF4PpsN0BQrvl8OJIrEfd/O9
** SIG ** zUPU8UypP7WLhK9k8tAUITGCEF0wghBZAgEBMIGTMH8x
** SIG ** CzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBD
** SIG ** b3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1
** SIG ** c3QgTmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xh
** SIG ** c3MgMyBTSEEyNTYgQ29kZSBTaWduaW5nIENBAhAwejZ6
** SIG ** qj5ogab5TwjLOzlkMAkGBSsOAwIaBQCgcDAQBgorBgEE
** SIG ** AYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGC
** SIG ** NwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIB
** SIG ** FTAjBgkqhkiG9w0BCQQxFgQURL9+7bYvlcnul/cgKu8P
** SIG ** YCzfsBcwDQYJKoZIhvcNAQEBBQAEggEAh+49jLKm/Wo6
** SIG ** gqxPR3gvpgxiMZtCxuxt4alsBLqtxLL2QfVh6Cw96lWG
** SIG ** 22XQz0lJyrfUodXW0jEXMj9ZEtaEPmdcNrLSOfVUkwpz
** SIG ** m9KkSV5XaLXqFwVw8NqtSE08rsCfuNK1R2VsmU3i6oeL
** SIG ** kacekBC1u8Vu6tFhqyMLYG7CVXwZ5wDF7mDmEvvx07NR
** SIG ** D04M5YdXy47gl7iFmT6uSOjRgSav6+ydC/t+5VUijC0T
** SIG ** c8IZqnAh4O+wXx2lDzrxFLawIoSkakAQXENmkc90j4+J
** SIG ** at+848jsCcUqi1MLt+dnrHT9P4L8S3m+LTC+cpGNma6D
** SIG ** +x1D6qjspIGJp7gJphN1LKGCDiwwgg4oBgorBgEEAYI3
** SIG ** AwMBMYIOGDCCDhQGCSqGSIb3DQEHAqCCDgUwgg4BAgED
** SIG ** MQ0wCwYJYIZIAWUDBAIBMIH/BgsqhkiG9w0BCRABBKCB
** SIG ** 7wSB7DCB6QIBAQYLYIZIAYb4RQEHFwMwITAJBgUrDgMC
** SIG ** GgUABBSIAIDRDFz/dJebI4nUE36E/UpVMQIVAKhQ+dsu
** SIG ** rZQ/t95xw1Bm3ZoLSh6QGA8yMDE3MDQxODEyNDQ1NVow
** SIG ** AwIBHqCBhqSBgzCBgDELMAkGA1UEBhMCVVMxHTAbBgNV
** SIG ** BAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQL
** SIG ** ExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQD
** SIG ** EyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNp
** SIG ** Z25lciAtIEcyoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ
** SIG ** aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJ
** SIG ** BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5j
** SIG ** LjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
** SIG ** azE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIElu
** SIG ** Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE4MDYG
** SIG ** A1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJvb3QgQ2Vy
** SIG ** dGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAw
** SIG ** MDAwWhcNMzEwMTExMjM1OTU5WjB3MQswCQYDVQQGEwJV
** SIG ** UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24x ** SIG ** UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24x
** SIG ** HzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsx ** SIG ** HzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsx
** SIG ** KDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3Rh ** SIG ** MDAuBgNVBAMTJ1N5bWFudGVjIENsYXNzIDMgU0hBMjU2
** SIG ** bXBpbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ** SIG ** IENvZGUgU2lnbmluZyBDQTAeFw0xNTEwMDkwMDAwMDBa
** SIG ** ggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8F ** SIG ** Fw0xODExMDcyMzU5NTlaMGExCzAJBgNVBAYTAlNJMREw
** SIG ** a4aaJwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+ ** SIG ** DwYDVQQIEwhTbG92ZW5pYTEPMA0GA1UEBxMGS2Ftbmlr
** SIG ** 66YH4t5/Xm1AONSRBudBfHkcy8utG7/YlZHz8O5s+K2W ** SIG ** MRYwFAYDVQQKFA1BbWViaXMgZC5vLm8uMRYwFAYDVQQD
** SIG ** OS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo ** SIG ** FA1BbWViaXMgZC5vLm8uMIIBIjANBgkqhkiG9w0BAQEF
** SIG ** 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKb ** SIG ** AAOCAQ8AMIIBCgKCAQEAl/LoF3DHaSrIaG1pgBmBwDyl
** SIG ** S+GImRr1wOkzFNbfx4Dbke7+vJJXcnf0zajM/gn1kze+ ** SIG ** Yt7sRvIuoEdGr/yMhV9RfUIft+xsTPVQOAirvgG+KUbc
** SIG ** lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZDqk+ ** SIG ** E3KMnGH+VuK7Y+vYzRp3dYTLinSQz1NKYAELyTdVzmmY
** SIG ** scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3 ** SIG ** mU3LX764yk3ABtSZsZwPoiCy+TXE9ZsCkugB2c7Qp9N/
** SIG ** AgMBAAGjggF3MIIBczAOBgNVHQ8BAf8EBAMCAQYwEgYD ** SIG ** O9EjjQDRwZlUa3nLoY96Y3qNPwkCn04ppYiqPeIXTRz8
** SIG ** VR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBdMFsGC2CG ** SIG ** XBLs4Nl/bD9wymEuNSV75vzobJ7BUYQwRU7lmNL2SwRY
** SIG ** SAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v ** SIG ** ENaf0DpdiyFLBsNafHjGYiXQHgNxZUBpj7OoRDNBvMQY
** SIG ** ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0 ** SIG ** L+LM8OrjhGIK1uGL5CqBD/p81ebeFsAZVxg9hrgnkPVQ
** SIG ** dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4GCCsGAQUFBwEB ** SIG ** w77U0LZw8wIDAQABo4IBYjCCAV4wCQYDVR0TBAIwADAO
** SIG ** BCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2Qu ** SIG ** BgNVHQ8BAf8EBAMCB4AwKwYDVR0fBCQwIjAgoB6gHIYa
** SIG ** Y29tMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5 ** SIG ** aHR0cDovL3N2LnN5bWNiLmNvbS9zdi5jcmwwZgYDVR0g
** SIG ** bWNiLmNvbS91bml2ZXJzYWwtcm9vdC5jcmwwEwYDVR0l ** SIG ** BF8wXTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIB
** SIG ** BAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAX ** SIG ** FhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEF
** SIG ** BgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYE ** SIG ** BQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAT
** SIG ** FK9j1sqjToVy4Ke8QfMpojh/gHViMB8GA1UdIwQYMBaA ** SIG ** BgNVHSUEDDAKBggrBgEFBQcDAzBXBggrBgEFBQcBAQRL
** SIG ** FLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB ** SIG ** MEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zdi5zeW1jZC5j
** SIG ** CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/z ** SIG ** b20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zdi5zeW1jYi5j
** SIG ** ociBiPenjxXmQCmt5l30otlWZIRxMCrdHmEXZiBWBpgZ ** SIG ** b20vc3YuY3J0MB8GA1UdIwQYMBaAFJY7U/B5M5evfYPv
** SIG ** jV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rSTyEyQ ** SIG ** LivMyreGHnJmMB0GA1UdDgQWBBT3B72WgJotdMR/DD09
** SIG ** Y0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzK ** SIG ** J93UkAqfzDANBgkqhkiG9w0BAQsFAAOCAQEAinEvQC+1
** SIG ** EHhsQm7wtsX4YVxS9U72a433Snq+8839A9fZ9gOoD+NT ** SIG ** yttKEsqAjt2YufpYlul3OQH17YKbUy4AAiKiAsUXWfTu
** SIG ** 9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgfqrnjOgC/ ** SIG ** XRVdkT6CrEYcHyOLaHfe36jVHw8vLIiR2cyEcB3vweyr
** SIG ** zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+Z ** SIG ** JnNpt+Za4I/XZMoG/vvCJmSltOj8C/7PRKWklGgynPNe
** SIG ** idvkORS92uTTw+orWrOVWFUEfcea7CMDjYUq0v+uqWGB ** SIG ** HI8+0d1vLzRtK77hFeV7CIMIfnpoYThJKTSLxdr0kn+j
** SIG ** MIIFSzCCBDOgAwIBAgIQVFjyqtdB1kS8hKl7oJZS5jAN ** SIG ** M8otfdLN2aDonnxe0Mf+2rkrX8AFIIHPpIXZj2X2VEmk
** SIG ** BgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsG ** SIG ** ZdyFINgI+KlJVQY/RY9BFMM2htLAIkNcDP1QVzFajhGH
** SIG ** A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV ** SIG ** yj+C+UtZQf5PceGYtJHNeq3cm6omjnEfyzi8/NwYFlkW
** SIG ** BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV ** SIG ** hvzJEH3woPqKgUramNFFLD0W5zCCBVkwggRBoAMCAQIC
** SIG ** BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcg ** SIG ** ED141/l2SWCyYX308B7KhiowDQYJKoZIhvcNAQELBQAw
** SIG ** Q0EwHhcNMTcwMTAyMDAwMDAwWhcNMjgwNDAxMjM1OTU5 ** SIG ** gcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
** SIG ** WjCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFu ** SIG ** biwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3Qg
** SIG ** dGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl ** SIG ** TmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDYgVmVyaVNp
** SIG ** YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRl ** SIG ** Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
** SIG ** YyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEcy ** SIG ** eTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMyBQdWJs
** SIG ** MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ** SIG ** aWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
** SIG ** mfP82AQJA4b511ymk8BCfOp8Y89dAOKO88CQ348p9Rjq ** SIG ** eSAtIEc1MB4XDTEzMTIxMDAwMDAwMFoXDTIzMTIwOTIz
** SIG ** lLeS5dewoHOB6OkKm0p8Af+dj6Q5pw7qRfQiDDpw7TlF ** SIG ** NTk1OVowfzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
** SIG ** i+TFG1zwRWhGJAVjdpsc/J5sKrFW5Yp/UnGu8jXVRiMG ** SIG ** bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h
** SIG ** HM9ILR20zbjZdiOOHP8+v7sGXGkHpmUO+F6ufS7tTa41 ** SIG ** bnRlYyBUcnVzdCBOZXR3b3JrMTAwLgYDVQQDEydTeW1h
** SIG ** 78nXAEL9KJUOn11yQgm8w9pE0u3MR4Tk/MotrFi+rveu ** SIG ** bnRlYyBDbGFzcyAzIFNIQTI1NiBDb2RlIFNpZ25pbmcg
** SIG ** 2UQNCLfCd9YaQ3DRbgPeUpLEEAhx2boiVfIfvO2bnTvi ** SIG ** Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
** SIG ** Xh1Mg/+XD3sL51WDTtIN677X7K5uR7mf36XWUbwEVe3/ ** SIG ** AQCXgx4AFq8ssdIIxNdok1FgHnH24ke021hNI2JqtL9a
** SIG ** J3BMye0qSxPhsblMD8kB7lVlX2kCeGbLPwIDAQABo4IB ** SIG ** G1H3ow0Yd2i72DarLyFQ2p7z518nTgvCl8gJcJOp2lwN
** SIG ** xzCCAcMwDAYDVR0TAQH/BAIwADBmBgNVHSAEXzBdMFsG ** SIG ** TqQNkaC07BTOkXJULs6j20TpUhs/QTzKSuSqwOg5q1PM
** SIG ** C2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBz ** SIG ** IdDMz3+b5sLMWGqCFe49Ns8cxZcHJI7xe74xLT1u3LWZ
** SIG ** Oi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBka ** SIG ** Qp9LYZVfHHDuF33bi+VhiXjHaBuvEXgamK7EVUdT2bMy
** SIG ** F2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMEAGA1UdHwQ5 ** SIG ** 1qEORkDFl5KK0VOnmVuFNVfT6pNiYSAKxzB3JBFNYoO2
** SIG ** MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 ** SIG ** untogjHuZcrf+dWNsjXcjCtvanJcYISc8gyUXsBWUgBI
** SIG ** ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB ** SIG ** zNP4pX3eL9cT5DiohNVGuBOGwhud6lo43ZvbAgMBAAGj
** SIG ** /wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDB3 ** SIG ** ggGDMIIBfzAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH
** SIG ** BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0dHA6 ** SIG ** MAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/
** SIG ** Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEF ** SIG ** BAgwBgEB/wIBADBsBgNVHSAEZTBjMGEGC2CGSAGG+EUB
** SIG ** BQcwAoYvaHR0cDovL3RzLWFpYS53cy5zeW1hbnRlYy5j ** SIG ** BxcDMFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3lt
** SIG ** b20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0RBCEwH6Qd ** SIG ** YXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6
** SIG ** MBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTUwHQYD ** SIG ** Ly93d3cuc3ltYXV0aC5jb20vcnBhMDAGA1UdHwQpMCcw
** SIG ** VR0OBBYEFAm1wf6WcpcpQ5rJ4AK6rvj9L7r2MB8GA1Ud ** SIG ** JaAjoCGGH2h0dHA6Ly9zMS5zeW1jYi5jb20vcGNhMy1n
** SIG ** IwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/gHViMA0GCSqG ** SIG ** NS5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF
** SIG ** SIb3DQEBCwUAA4IBAQAXswqI6VxaXiBrOwoVsmzFqYoy ** SIG ** BwMDMA4GA1UdDwEB/wQEAwIBBjApBgNVHREEIjAgpB4w
** SIG ** h9Ox9BxTroW+P5v/17y3lIW0x1J+lOi97WGy1KeZ5MPJ ** SIG ** HDEaMBgGA1UEAxMRU3ltYW50ZWNQS0ktMS01NjcwHQYD
** SIG ** k8E1PQvoaApdVpi9sSI70UR617/wbVEyitUj3zgBN/bi ** SIG ** VR0OBBYEFJY7U/B5M5evfYPvLivMyreGHnJmMB8GA1Ud
** SIG ** Uyt6KxGPt01sejMDG3xrCZQXu+TbWNQhE2Xn7NElyix1 ** SIG ** IwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
** SIG ** mpx//Mm7KmirxH20z6PJbKfZxACciQp3kfRNovsxO4Zu ** SIG ** SIb3DQEBCwUAA4IBAQAThRoeaak396C9pK9+HWFT/p2M
** SIG ** 9uYfUAOGm7/LQqvmdptyWhEBisbvpW+V592uuuYiZfAY ** SIG ** XgymdR54FyPd/ewaA1U5+3GVx2Vap44w0kRaYdtwb9oh
** SIG ** WRsRyc2At9iXRx9CCPiscR+wRlOz1LLVo6tQdUgSF4Kt ** SIG ** BcIuc7pJ8dGT/l3JzV4D4ImeP3Qe1/c4i6nWz7s1LzNY
** SIG ** z+BBTzJ+zZUcv5GKCD2kp2cClt8kTKXQQcCCYKOKFzJL ** SIG ** qJJW0chNO4LmeYQW/CiwsUfzHaI+7ofZpn+kVqU/rYQu
** SIG ** 07zPpLSMMYICWjCCAlYCAQEwgYswdzELMAkGA1UEBhMC ** SIG ** Kd58vKiqoz0EAeq6k6IOUCIpF0yH5DoRX9akJYmbBWsv
** SIG ** tMkBTCd7C6wZBSKgYBU/2sn7TUyP+3Jnd/0nlMe6NQ6I
** SIG ** Sf6N/SivShK9DbOXBd5EDBX6NisD3MFQAfGhEV0U5eK9
** SIG ** J0tUviuEXg+mw3QFCu+Xw4kisR93873NQ9TxTKk/tYuE
** SIG ** r2Ty0BQhMYIEPDCCBDgCAQEwgZMwfzELMAkGA1UEBhMC
** SIG ** VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9u ** SIG ** VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9u
** SIG ** MR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr ** SIG ** MR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr
** SIG ** MSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0 ** SIG ** MTAwLgYDVQQDEydTeW1hbnRlYyBDbGFzcyAzIFNIQTI1
** SIG ** YW1waW5nIENBAhBUWPKq10HWRLyEqXugllLmMAsGCWCG ** SIG ** NiBDb2RlIFNpZ25pbmcgQ0ECEDB6NnqqPmiBpvlPCMs7
** SIG ** SAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN ** SIG ** OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
** SIG ** AQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTE3MDQxODEyNDQ1 ** SIG ** MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
** SIG ** NVowLwYJKoZIhvcNAQkEMSIEIKDK6Vssn4nGmbvyS9LY ** SIG ** AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
** SIG ** WmkPKs0wWaFNqgdjX9Bg5ZBvMDcGCyqGSIb3DQEJEAIv ** SIG ** DQEJBDEWBBQJ/85hYXMdMN1z5HBGtnuiWJv/CjANBgkq
** SIG ** MSgwJjAkMCIEIM96wXrQR+zV/cNoIgMbEtTvB4tvK0xe ** SIG ** hkiG9w0BAQEFAASCAQA5+GNAho0bSi+4/RnkR/pRsLlV
** SIG ** a6Qfj/LPS61nMAsGCSqGSIb3DQEBAQSCAQBfV4PgwAUe ** SIG ** OP7qdfX97YZ/AMnu4uh8NKTaTWnf2XI1ixLS2zlm9XP3
** SIG ** 4wJ34IGcfXzIeqpR/TjCMh8nv6UiHEBJnIAVSoxoDK79 ** SIG ** 2jOvDmjkFjb4njpEBRn3BIAhZAZ0i2SJ6PEEuYZXhed7
** SIG ** uOft1F0SWmscs9Vzjcu/g2mHkKgERhioYXnpfem07AyJ ** SIG ** ogx5ym+UDjFSt61aT4JWMJ/Knd9gWfguZtCk8sPP7kyh
** SIG ** lCh8+doOauxqOPLi9HDl4yWm3jlxSD5igIpIzdqYvPU2 ** SIG ** 6O4kfbK48NN+YyQ7Yote5E+0S7bKueWRdz/1Ta90ooYD
** SIG ** Jq0UavRQBAI3Jg+esyAdKO8iuHoQIYYb9a+lp3MaZuEM ** SIG ** MxkbSND68qcTHfcb+Vwvw4QspLIqXxx8kTtHZHScDtxM
** SIG ** M41nqogbZYDo5yAsunf23iLA3u7Y0L0g0FE1YaGQp+tx ** SIG ** PavkCvUBpcVSxg8qwNa/rpZp0GNQRsJEtDcHbG+GG/Qc
** SIG ** 86Ne6DWxMz5dfuWdYvbtTr54PNen9Nzumgt2ZGt4w9VE ** SIG ** wKm+6lriJ+RFtbcClrF0GQ3geXyfKbm1va9pJXyRDjXh
** SIG ** 82/mZL3qBE4RIsiiofrYg83ZdjwbZ8XLMmbb5qyns2qP ** SIG ** hpyouKpPoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
** SIG ** rrsW4XwsKdp9FnWp+u4Xv57J ** SIG ** AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
** SIG ** bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
** SIG ** bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
** SIG ** RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
** SIG ** MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
** SIG ** hvcNAQkFMQ8XDTE4MDkwNzA3NTkyNFowIwYJKoZIhvcN
** SIG ** AQkEMRYEFNfTgNF3wzX76PoLQ67NV+ZMbylvMA0GCSqG
** SIG ** SIb3DQEBAQUABIIBAByviB39xoAmUBQ+K+nbDsejzlst
** SIG ** 4pomv3ElJTgEdXdaeolOs3I96d2B+Gzm18tZat/akcqk
** SIG ** URHeOYoNOlCHsbLBtm9NXBcWGIdt/0WiTS65lLr9Iqec
** SIG ** o4uUoz2/3b2l/t2YejMpHZU53DkBjf3SeFsJ2m1kyu8C
** SIG ** Wbg+46zDtRAZbaKX3cVyUEQIZxqbSgL1wSE4orT3JUU3
** SIG ** YqcgmUKieMape4GWV0+K34p9Glbs55oaF/cs3qpRLA7f
** SIG ** GgpeZsH2KZ9MeRUd/BCye9WMT3YuLeToXJbhIRzJUX7k
** SIG ** Av37+s5CqV5qSe/Agz4PCyl4qO70bFIlHpF6C+4XE9vu
** SIG ** eXkqThI=
</signature> </signature>
</package> </package>

410
String.js
View File

@ -1,5 +1,5 @@
/* /*
Copyright 1991-2017 Amebis Copyright 1991-2018 Amebis
Copyright 2016 GÉANT Copyright 2016 GÉANT
This file is part of MSIBuild. This file is part of MSIBuild.
@ -42,6 +42,27 @@ function _S(str)
} }
var _MSI_stat = null;
function _MSI(str)
{
if (!_MSI_stat) {
_MSI_stat = {
"re_nonid": new RegExp("[^a-zA-Z0-9_\\.]", "g"),
"re_noninitial": new RegExp("^([^a-zA-Z_])", "g")
};
}
if (str == null) return null;
switch (typeof(str)) {
case "string": break;
case "undefined": return null;
default: try { str = str.toString(); } catch (err) { return null; }
}
return str.replace(_MSI_stat.re_nonid, "_").replace(_MSI_stat.re_noninitial, "_\\1");
}
var LF2CRLF_stat = null; var LF2CRLF_stat = null;
function LF2CRLF(str) function LF2CRLF(str)
{ {
@ -143,215 +164,188 @@ function CodePageToId(codepage)
/*@end @*/ /*@end @*/
// SIG // Begin signature block // SIG // Begin signature block
// SIG // MIIbHwYJKoZIhvcNAQcCoIIbEDCCGwwCAQExCzAJBgUr // SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB // SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB // SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFNBUFg4FGWb6 // SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFMRpraBCx04k
// SIG // dBYwODNXFkTNwtN4oIIKLzCCBM4wggO2oAMCAQICEDB6 // SIG // lgSdHDI6Rr8HIj3OoIISyDCCA+4wggNXoAMCAQICEH6T
// SIG // NnqqPmiBpvlPCMs7OWQwDQYJKoZIhvcNAQELBQAwfzEL // SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
// SIG // MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENv // SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
// SIG // cnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVz // SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
// SIG // dCBOZXR3b3JrMTAwLgYDVQQDEydTeW1hbnRlYyBDbGFz // SIG // EwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZp
// SIG // cyAzIFNIQTI1NiBDb2RlIFNpZ25pbmcgQ0EwHhcNMTUx // SIG // Y2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1w
// SIG // MDA5MDAwMDAwWhcNMTgxMTA3MjM1OTU5WjBhMQswCQYD // SIG // aW5nIENBMB4XDTEyMTIyMTAwMDAwMFoXDTIwMTIzMDIz
// SIG // VQQGEwJTSTERMA8GA1UECBMIU2xvdmVuaWExDzANBgNV // SIG // NTk1OVowXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
// SIG // BAcTBkthbW5pazEWMBQGA1UEChQNQW1lYmlzIGQuby5v // SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
// SIG // LjEWMBQGA1UEAxQNQW1lYmlzIGQuby5vLjCCASIwDQYJ // SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
// SIG // KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJfy6Bdwx2kq // SIG // RzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
// SIG // yGhtaYAZgcA8pWLe7EbyLqBHRq/8jIVfUX1CH7fsbEz1 // SIG // AQCxrLNJVEuXHBIK2CV5kSJXKm/cuCbEQ3Nrwr8uUFr7
// SIG // UDgIq74BvilG3BNyjJxh/lbiu2Pr2M0ad3WEy4p0kM9T // SIG // FMJ2jkMBJUO0oeJF9Oi3e8N0zCLXtJQAAvdN7b+0t0Qk
// SIG // SmABC8k3Vc5pmJlNy1++uMpNwAbUmbGcD6Igsvk1xPWb // SIG // a81fRTvRRM5DEnMXgotptCvLmR6schsmTXEfsTHd+1Fh
// SIG // ApLoAdnO0KfTfzvRI40A0cGZVGt5y6GPemN6jT8JAp9O // SIG // AlOmqvVJLAV4RaUvic7nmef+jOJXPz3GktxK+Hsz5HkK
// SIG // KaWIqj3iF00c/FwS7ODZf2w/cMphLjUle+b86GyewVGE // SIG // +/B1iEGc/8UDUZmq12yfk2mHZSmDhcJgFMTIyTsU2sCB
// SIG // MEVO5ZjS9ksEWBDWn9A6XYshSwbDWnx4xmIl0B4DcWVA // SIG // 8B8NdN6SIqvK9/t0fCfm90obf6fDni2uiuqm5qonFn1h
// SIG // aY+zqEQzQbzEGC/izPDq44RiCtbhi+QqgQ/6fNXm3hbA // SIG // 95hxEbziUKFL5V365Q6nLJ+qZSDT2JboyHylTkhE/xni
// SIG // GVcYPYa4J5D1UMO+1NC2cPMCAwEAAaOCAWIwggFeMAkG // SIG // RAeSC9dohIBdanhkRc1gRn5UwRN8xXnxycFxAgMBAAGj
// SIG // A1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeAMCsGA1UdHwQk // SIG // gfowgfcwHQYDVR0OBBYEFF+a9W5czMx0mtTdfe8/2+xM
// SIG // MCIwIKAeoByGGmh0dHA6Ly9zdi5zeW1jYi5jb20vc3Yu // SIG // gC7dMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYW
// SIG // Y3JsMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAj // SIG // aHR0cDovL29jc3AudGhhd3RlLmNvbTASBgNVHRMBAf8E
// SIG // BggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9j // SIG // CDAGAQH/AgEAMD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6
// SIG // cHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9kLnN5bWNi // SIG // Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVUaW1lc3RhbXBp
// SIG // LmNvbS9ycGEwEwYDVR0lBAwwCgYIKwYBBQUHAwMwVwYI // SIG // bmdDQS5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDgYD
// SIG // KwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8v // SIG // VR0PAQH/BAQDAgEGMCgGA1UdEQQhMB+kHTAbMRkwFwYD
// SIG // c3Yuc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8v // SIG // VQQDExBUaW1lU3RhbXAtMjA0OC0xMA0GCSqGSIb3DQEB
// SIG // c3Yuc3ltY2IuY29tL3N2LmNydDAfBgNVHSMEGDAWgBSW // SIG // BQUAA4GBAAMJm495739ZMKrvaLX64wkdu0+CBl03X6ZS
// SIG // O1PweTOXr32D7y4rzMq3hh5yZjAdBgNVHQ4EFgQU9we9 // SIG // nxaN6hySCURu9W3rWHww6PlpjSNzCxJvR6muORH4KrGb
// SIG // loCaLXTEfww9PSfd1JAKn8wwDQYJKoZIhvcNAQELBQAD // SIG // sBrDjutZlgCtzgxNstAxpghcKnr84nodV0yoZRjpeUBi
// SIG // ggEBAIpxL0AvtcrbShLKgI7dmLn6WJbpdzkB9e2Cm1Mu // SIG // JZZux8c3aoMhCI5B6t3ZVz8dd0mHKhYGXqY4aiISo1EZ
// SIG // AAIiogLFF1n07l0VXZE+gqxGHB8ji2h33t+o1R8PLyyI // SIG // g362MIIEozCCA4ugAwIBAgIQDs/0OMj+vzVuBNhqmBsa
// SIG // kdnMhHAd78HsqyZzabfmWuCP12TKBv77wiZkpbTo/Av+ // SIG // UDANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJVUzEd
// SIG // z0SlpJRoMpzzXhyPPtHdby80bSu+4RXlewiDCH56aGE4 // SIG // MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xMDAu
// SIG // SSk0i8Xa9JJ/ozPKLX3Szdmg6J58XtDH/tq5K1/ABSCB // SIG // BgNVBAMTJ1N5bWFudGVjIFRpbWUgU3RhbXBpbmcgU2Vy
// SIG // z6SF2Y9l9lRJpGXchSDYCPipSVUGP0WPQRTDNobSwCJD // SIG // dmljZXMgQ0EgLSBHMjAeFw0xMjEwMTgwMDAwMDBaFw0y
// SIG // XAz9UFcxWo4Rh8o/gvlLWUH+T3HhmLSRzXqt3JuqJo5x // SIG // MDEyMjkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMR0wGwYD
// SIG // H8s4vPzcGBZZFob8yRB98KD6ioFK2pjRRSw9FucwggVZ // SIG // VQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjE0MDIGA1UE
// SIG // MIIEQaADAgECAhA9eNf5dklgsmF99PAeyoYqMA0GCSqG // SIG // AxMrU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNl
// SIG // SIb3DQEBCwUAMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UE // SIG // cyBTaWduZXIgLSBHNDCCASIwDQYJKoZIhvcNAQEBBQAD
// SIG // ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT // SIG // ggEPADCCAQoCggEBAKJjCzlEuLsjp0RJuw7/ofBhClOT
// SIG // aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAy // SIG // sJjbrSwPSsVu/4Y8U1UPFc4EPyv9qZaW2b5heQtbyUyG
// SIG // MDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6 // SIG // duXgQ0sile7CK0PBn9hotI5AT+6FOLkRxSPyZFjwFTJv
// SIG // ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENs // SIG // TlehroikAtcqHs1L4d1j1ReJMluwXplaqJ0oUA4X7pbb
// SIG // YXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlv // SIG // YTtFUR3PElYLkkf8q672Zj1HrHBy55LnX80QucSDZJQZ
// SIG // biBBdXRob3JpdHkgLSBHNTAeFw0xMzEyMTAwMDAwMDBa // SIG // vSWA4ejSIqXQugJ6oXeTW2XD7hd0vEGGKtwITIySjJEt
// SIG // Fw0yMzEyMDkyMzU5NTlaMH8xCzAJBgNVBAYTAlVTMR0w // SIG // nndEH2jWqHR32w5bMotWizO92WPISZ06xcXqMwvS8aMb
// SIG // GwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0G // SIG // 9Iu+2bNXizveBKd6IrIkri7HcMW+ToMmCPsLvalPmQjh
// SIG // A1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEwMC4G // SIG // EChyqs0CAwEAAaOCAVcwggFTMAwGA1UdEwEB/wQCMAAw
// SIG // A1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBTSEEyNTYgQ29k // SIG // FgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/
// SIG // ZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC // SIG // BAQDAgeAMHMGCCsGAQUFBwEBBGcwZTAqBggrBgEFBQcw
// SIG // AQ8AMIIBCgKCAQEAl4MeABavLLHSCMTXaJNRYB5x9uJH // SIG // AYYeaHR0cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29t
// SIG // tNtYTSNiarS/WhtR96MNGHdou9g2qy8hUNqe8+dfJ04L // SIG // MDcGCCsGAQUFBzAChitodHRwOi8vdHMtYWlhLndzLnN5
// SIG // wpfICXCTqdpcDU6kDZGgtOwUzpFyVC7Oo9tE6VIbP0E8 // SIG // bWFudGVjLmNvbS90c3MtY2EtZzIuY2VyMDwGA1UdHwQ1
// SIG // ykrkqsDoOatTzCHQzM9/m+bCzFhqghXuPTbPHMWXBySO // SIG // MDMwMaAvoC2GK2h0dHA6Ly90cy1jcmwud3Muc3ltYW50
// SIG // 8Xu+MS09bty1mUKfS2GVXxxw7hd924vlYYl4x2gbrxF4 // SIG // ZWMuY29tL3Rzcy1jYS1nMi5jcmwwKAYDVR0RBCEwH6Qd
// SIG // GpiuxFVHU9mzMtahDkZAxZeSitFTp5lbhTVX0+qTYmEg // SIG // MBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTIwHQYD
// SIG // CscwdyQRTWKDtrp7aIIx7mXK3/nVjbI13Iwrb2pyXGCE // SIG // VR0OBBYEFEbGaaMOShQe1UzaUmMXP142vA3mMB8GA1Ud
// SIG // nPIMlF7AVlIASMzT+KV93i/XE+Q4qITVRrgThsIbnepa // SIG // IwQYMBaAFF+a9W5czMx0mtTdfe8/2+xMgC7dMA0GCSqG
// SIG // ON2b2wIDAQABo4IBgzCCAX8wLwYIKwYBBQUHAQEEIzAh // SIG // SIb3DQEBBQUAA4IBAQB4O7SRKgBM8I9iMDd4o4QnB28Y
// SIG // MB8GCCsGAQUFBzABhhNodHRwOi8vczIuc3ltY2IuY29t // SIG // st4l3KDUlAOqhk4ln5pAAxzdzuN5yyFoBtq2MrRtv/Qs
// SIG // MBIGA1UdEwEB/wQIMAYBAf8CAQAwbAYDVR0gBGUwYzBh // SIG // JmMz5ElkbQ3mw2cO9wWkNWx8iRbG6bLfsundIMZxD82V
// SIG // BgtghkgBhvhFAQcXAzBSMCYGCCsGAQUFBwIBFhpodHRw // SIG // dNy2XN69Nx9DeOZ4tc0oBCCjqvFLxIgpkQ6A0RH83Vx2
// SIG // Oi8vd3d3LnN5bWF1dGguY29tL2NwczAoBggrBgEFBQcC // SIG // bk9eDkVGQW4NsOo4mrE62glxEPwcebSAe6xp9P2ctgwW
// SIG // AjAcGhpodHRwOi8vd3d3LnN5bWF1dGguY29tL3JwYTAw // SIG // K/F/Wwk9m1viFsoTgW0ALjgNqCmPLOGy9FqpAa8VnCwv
// SIG // BgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2Iu // SIG // SRvbIrvD/niUUcOGsYKIXfA9tFGheTMrLnu53CAJE3Hr
// SIG // Y29tL3BjYTMtZzUuY3JsMB0GA1UdJQQWMBQGCCsGAQUF // SIG // ahlbz+ilMFcsiUk/uc9/yb8+ImhjU5q9aXSsxR08f5Lg
// SIG // BwMCBggrBgEFBQcDAzAOBgNVHQ8BAf8EBAMCAQYwKQYD // SIG // w7wc2AR1MIIEzjCCA7agAwIBAgIQMHo2eqo+aIGm+U8I
// SIG // VR0RBCIwIKQeMBwxGjAYBgNVBAMTEVN5bWFudGVjUEtJ // SIG // yzs5ZDANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJV
// SIG // LTEtNTY3MB0GA1UdDgQWBBSWO1PweTOXr32D7y4rzMq3
// SIG // hh5yZjAfBgNVHSMEGDAWgBR/02Wnwt3su/AwCfNDOfoC
// SIG // rzMxMzANBgkqhkiG9w0BAQsFAAOCAQEAE4UaHmmpN/eg
// SIG // vaSvfh1hU/6djF4MpnUeeBcj3f3sGgNVOftxlcdlWqeO
// SIG // MNJEWmHbcG/aIQXCLnO6SfHRk/5dyc1eA+CJnj90Htf3
// SIG // OIup1s+7NS8zWKiSVtHITTuC5nmEFvwosLFH8x2iPu6H
// SIG // 2aZ/pFalP62ELinefLyoqqM9BAHqupOiDlAiKRdMh+Q6
// SIG // EV/WpCWJmwVrL7TJAUwnewusGQUioGAVP9rJ+01Mj/ty
// SIG // Z3f9J5THujUOiEn+jf0or0oSvQ2zlwXeRAwV+jYrA9zB
// SIG // UAHxoRFdFOXivSdLVL4rhF4PpsN0BQrvl8OJIrEfd/O9
// SIG // zUPU8UypP7WLhK9k8tAUITGCEFwwghBYAgEBMIGTMH8x
// SIG // CzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBD
// SIG // b3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1
// SIG // c3QgTmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xh
// SIG // c3MgMyBTSEEyNTYgQ29kZSBTaWduaW5nIENBAhAwejZ6
// SIG // qj5ogab5TwjLOzlkMAkGBSsOAwIaBQCgcDAQBgorBgEE
// SIG // AYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGC
// SIG // NwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIB
// SIG // FTAjBgkqhkiG9w0BCQQxFgQU6tgc3VEqnbXE2w1EVY7n
// SIG // Z8qhLkAwDQYJKoZIhvcNAQEBBQAEggEAAQDIfzu/XUM5
// SIG // lodMcfQQD2Jz94oF5V6wu8x526SchZxS9IsiIySwA/qR
// SIG // 8VYVxZ0yDEX+FWrPnnz0IsYt3uMyPoKM+oI4KfNH3MaV
// SIG // nzp2KKJ6ZGbUmdoE0UojG61NGnewT7tDUVogdQJy5kfg
// SIG // pTI+NtL7JYUEezjgMNIpzAe5sjmfFpOIO6jbu/jbIkIU
// SIG // r7UZQhhsstmK+WpTkeQoGbweUmIjKS82WgOagPWCfoVV
// SIG // Ocv0m7LH+yqHwsbCWdvEziQSoCI4YcCMq0z4eFbxllrJ
// SIG // dSDuc4Lx6YOOYwYBXX27YkWrEj331kTM8JemHte635Vl
// SIG // SGaQ+67Cpc56FTsilXYgWqGCDiswgg4nBgorBgEEAYI3
// SIG // AwMBMYIOFzCCDhMGCSqGSIb3DQEHAqCCDgQwgg4AAgED
// SIG // MQ0wCwYJYIZIAWUDBAIBMIH+BgsqhkiG9w0BCRABBKCB
// SIG // 7gSB6zCB6AIBAQYLYIZIAYb4RQEHFwMwITAJBgUrDgMC
// SIG // GgUABBQ8XOvj5oWtPPGYTjP9Q0FMSlWUhQIUCyXLa2rD
// SIG // z5ji4zQiicWREj4QG8QYDzIwMTcxMjIyMDczODM2WjAD
// SIG // AgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UE
// SIG // ChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsT
// SIG // FlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMT
// SIG // KFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2ln
// SIG // bmVyIC0gRzKgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo
// SIG // UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkG
// SIG // A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMu
// SIG // MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3Jr
// SIG // MTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5j
// SIG // LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYD
// SIG // VQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0
// SIG // aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAw
// SIG // MDBaFw0zMTAxMTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVT
// SIG // MR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEf
// SIG // MB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEo
// SIG // MCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFt
// SIG // cGluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
// SIG // AQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVr
// SIG // hponADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37r
// SIG // pgfi3n9ebUA41JEG50F8eRzLy60bv9iVkfPw7mz4rZY5
// SIG // Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0
// SIG // hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL
// SIG // 4YiZGvXA6TMU1t/HgNuR7v68kldyd/TNqMz+CfWTN76V
// SIG // iGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kOqT6x
// SIG // zPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcC
// SIG // AwEAAaOCAXcwggFzMA4GA1UdDwEB/wQEAwIBBjASBgNV
// SIG // HRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0wWwYLYIZI
// SIG // AYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k
// SIG // LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0
// SIG // cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYIKwYBBQUHAQEE
// SIG // IjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5j
// SIG // b20wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3lt
// SIG // Y2IuY29tL3VuaXZlcnNhbC1yb290LmNybDATBgNVHSUE
// SIG // DDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcG
// SIG // A1UEAxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQU
// SIG // r2PWyqNOhXLgp7xB8ymiOH+AdWIwHwYDVR0jBBgwFoAU
// SIG // tnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL
// SIG // BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/Oh
// SIG // yIGI96ePFeZAKa3mXfSi2VZkhHEwKt0eYRdmIFYGmBmN
// SIG // XXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPITJBj
// SIG // SDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQ
// SIG // eGxCbvC2xfhhXFL1TvZrjfdKer7zzf0D19n2A6gP41P3
// SIG // CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+queM6AL/O
// SIG // ipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ
// SIG // 2+Q5FL3a5NPD6itas5VYVQR9x5rsIwONhSrS/66pYYEw
// SIG // ggVLMIIEM6ADAgECAhBUWPKq10HWRLyEqXugllLmMA0G
// SIG // CSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYD
// SIG // VQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UE
// SIG // CxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE
// SIG // AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBD
// SIG // QTAeFw0xNzAxMDIwMDAwMDBaFw0yODA0MDEyMzU5NTla
// SIG // MIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50
// SIG // ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj
// SIG // IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVj
// SIG // IFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzIw
// SIG // ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCZ
// SIG // 8/zYBAkDhvnXXKaTwEJ86nxjz10A4o7zwJDfjyn1GOqU
// SIG // t5Ll17Cgc4Ho6QqbSnwB/52PpDmnDupF9CIMOnDtOUWL
// SIG // 5MUbXPBFaEYkBWN2mxz8nmwqsVblin9Sca7yNdVGIwYc
// SIG // z0gtHbTNuNl2I44c/z6/uwZcaQemZQ74Xq59Lu1NrjXv
// SIG // ydcAQv0olQ6fXXJCCbzD2kTS7cxHhOT8yi2sWL6u967Z
// SIG // RA0It8J31hpDcNFuA95SksQQCHHZuiJV8h+87ZudO+Je
// SIG // HUyD/5cPewvnVYNO0g3rvtfsrm5HuZ/fpdZRvARV7f8n
// SIG // cEzJ7SpLE+GxuUwPyQHuVWVfaQJ4Zss/AgMBAAGjggHH
// SIG // MIIBwzAMBgNVHRMBAf8EAjAAMGYGA1UdIARfMF0wWwYL
// SIG // YIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6
// SIG // Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoX
// SIG // aHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwQAYDVR0fBDkw
// SIG // NzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl
// SIG // Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/
// SIG // BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMHcG
// SIG // CCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0cDov
// SIG // L3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUF
// SIG // BzAChi9odHRwOi8vdHMtYWlhLndzLnN5bWFudGVjLmNv
// SIG // bS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREEITAfpB0w
// SIG // GzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNTAdBgNV
// SIG // HQ4EFgQUCbXB/pZylylDmsngArqu+P0vuvYwHwYDVR0j
// SIG // BBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+AdWIwDQYJKoZI
// SIG // hvcNAQELBQADggEBABezCojpXFpeIGs7ChWybMWpijKH
// SIG // 07H0HFOuhb4/m//XvLeUhbTHUn6U6L3tYbLUp5nkw8mT
// SIG // wTU9C+hoCl1WmL2xIjvRRHrXv/BtUTKK1SPfOAE39uJT
// SIG // K3orEY+3TWx6MwMbfGsJlBe75NtY1CETZefs0SXKLHWa
// SIG // nH/8ybsqaKvEfbTPo8lsp9nEAJyJCneR9E2i+zE7hm72
// SIG // 5h9QA4abv8tCq+Z2m3JaEQGKxu+lb5Xn3a665iJl8BhZ
// SIG // GxHJzYC32JdHH0II+KxxH7BGU7PUstWjq1B1SBIXgq3P
// SIG // 4EFPMn7NlRy/kYoIPaSnZwKW3yRMpdBBwIJgo4oXMkvT
// SIG // vM+ktIwxggJaMIICVgIBATCBizB3MQswCQYDVQQGEwJV
// SIG // UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24x // SIG // UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24x
// SIG // HzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsx // SIG // HzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsx
// SIG // KDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3Rh // SIG // MDAuBgNVBAMTJ1N5bWFudGVjIENsYXNzIDMgU0hBMjU2
// SIG // bXBpbmcgQ0ECEFRY8qrXQdZEvISpe6CWUuYwCwYJYIZI // SIG // IENvZGUgU2lnbmluZyBDQTAeFw0xNTEwMDkwMDAwMDBa
// SIG // AWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0B // SIG // Fw0xODExMDcyMzU5NTlaMGExCzAJBgNVBAYTAlNJMREw
// SIG // CRABBDAcBgkqhkiG9w0BCQUxDxcNMTcxMjIyMDczODM2 // SIG // DwYDVQQIEwhTbG92ZW5pYTEPMA0GA1UEBxMGS2Ftbmlr
// SIG // WjAvBgkqhkiG9w0BCQQxIgQgwPPbRB5td0uPwwvIRQEQ // SIG // MRYwFAYDVQQKFA1BbWViaXMgZC5vLm8uMRYwFAYDVQQD
// SIG // H9l1PGWblBa4rYy+JgR5tYIwNwYLKoZIhvcNAQkQAi8x // SIG // FA1BbWViaXMgZC5vLm8uMIIBIjANBgkqhkiG9w0BAQEF
// SIG // KDAmMCQwIgQgz3rBetBH7NX9w2giAxsS1O8Hi28rTF5r // SIG // AAOCAQ8AMIIBCgKCAQEAl/LoF3DHaSrIaG1pgBmBwDyl
// SIG // pB+P8s9LrWcwCwYJKoZIhvcNAQEBBIIBAHjnIQj0/Nze // SIG // Yt7sRvIuoEdGr/yMhV9RfUIft+xsTPVQOAirvgG+KUbc
// SIG // /78erUQqY2akA9onuRQZqgkWJhX1dKKM4pMg8fVFD1xN // SIG // E3KMnGH+VuK7Y+vYzRp3dYTLinSQz1NKYAELyTdVzmmY
// SIG // PE7hPHUeySOcg3I56kUuPvSlnb0K4oebNF4KaMOAPT0z // SIG // mU3LX764yk3ABtSZsZwPoiCy+TXE9ZsCkugB2c7Qp9N/
// SIG // Nmp75iL5WW2SB/ezJiHKarxs3UvJvSzWNtymXG/2hwDO // SIG // O9EjjQDRwZlUa3nLoY96Y3qNPwkCn04ppYiqPeIXTRz8
// SIG // 0gbxU6fIuOwaCNrW1/8PC/DnAdpUCt/KE9On/w+IBnf4 // SIG // XBLs4Nl/bD9wymEuNSV75vzobJ7BUYQwRU7lmNL2SwRY
// SIG // 4bLpLHes67/q+IZ/IFHMWJjNJrcA9bw7LTrHzeO8rfOv // SIG // ENaf0DpdiyFLBsNafHjGYiXQHgNxZUBpj7OoRDNBvMQY
// SIG // lrzpoNk9JMdMYJwvUZVzDjMi5PSVHPj2/BLMzjGh0a65 // SIG // L+LM8OrjhGIK1uGL5CqBD/p81ebeFsAZVxg9hrgnkPVQ
// SIG // Uv2+XrdWrE8b1sNOwz3//vk7ceR+AeKSLRjG9HoSn3P8 // SIG // w77U0LZw8wIDAQABo4IBYjCCAV4wCQYDVR0TBAIwADAO
// SIG // ZlIuSdXBcQk/fNadIwXElMM= // SIG // BgNVHQ8BAf8EBAMCB4AwKwYDVR0fBCQwIjAgoB6gHIYa
// SIG // aHR0cDovL3N2LnN5bWNiLmNvbS9zdi5jcmwwZgYDVR0g
// SIG // BF8wXTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIB
// SIG // FhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEF
// SIG // BQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAT
// SIG // BgNVHSUEDDAKBggrBgEFBQcDAzBXBggrBgEFBQcBAQRL
// SIG // MEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zdi5zeW1jZC5j
// SIG // b20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zdi5zeW1jYi5j
// SIG // b20vc3YuY3J0MB8GA1UdIwQYMBaAFJY7U/B5M5evfYPv
// SIG // LivMyreGHnJmMB0GA1UdDgQWBBT3B72WgJotdMR/DD09
// SIG // J93UkAqfzDANBgkqhkiG9w0BAQsFAAOCAQEAinEvQC+1
// SIG // yttKEsqAjt2YufpYlul3OQH17YKbUy4AAiKiAsUXWfTu
// SIG // XRVdkT6CrEYcHyOLaHfe36jVHw8vLIiR2cyEcB3vweyr
// SIG // JnNpt+Za4I/XZMoG/vvCJmSltOj8C/7PRKWklGgynPNe
// SIG // HI8+0d1vLzRtK77hFeV7CIMIfnpoYThJKTSLxdr0kn+j
// SIG // M8otfdLN2aDonnxe0Mf+2rkrX8AFIIHPpIXZj2X2VEmk
// SIG // ZdyFINgI+KlJVQY/RY9BFMM2htLAIkNcDP1QVzFajhGH
// SIG // yj+C+UtZQf5PceGYtJHNeq3cm6omjnEfyzi8/NwYFlkW
// SIG // hvzJEH3woPqKgUramNFFLD0W5zCCBVkwggRBoAMCAQIC
// SIG // ED141/l2SWCyYX308B7KhiowDQYJKoZIhvcNAQELBQAw
// SIG // gcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
// SIG // biwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3Qg
// SIG // TmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDYgVmVyaVNp
// SIG // Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
// SIG // eTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMyBQdWJs
// SIG // aWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
// SIG // eSAtIEc1MB4XDTEzMTIxMDAwMDAwMFoXDTIzMTIwOTIz
// SIG // NTk1OVowfzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
// SIG // bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h
// SIG // bnRlYyBUcnVzdCBOZXR3b3JrMTAwLgYDVQQDEydTeW1h
// SIG // bnRlYyBDbGFzcyAzIFNIQTI1NiBDb2RlIFNpZ25pbmcg
// SIG // Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
// SIG // AQCXgx4AFq8ssdIIxNdok1FgHnH24ke021hNI2JqtL9a
// SIG // G1H3ow0Yd2i72DarLyFQ2p7z518nTgvCl8gJcJOp2lwN
// SIG // TqQNkaC07BTOkXJULs6j20TpUhs/QTzKSuSqwOg5q1PM
// SIG // IdDMz3+b5sLMWGqCFe49Ns8cxZcHJI7xe74xLT1u3LWZ
// SIG // Qp9LYZVfHHDuF33bi+VhiXjHaBuvEXgamK7EVUdT2bMy
// SIG // 1qEORkDFl5KK0VOnmVuFNVfT6pNiYSAKxzB3JBFNYoO2
// SIG // untogjHuZcrf+dWNsjXcjCtvanJcYISc8gyUXsBWUgBI
// SIG // zNP4pX3eL9cT5DiohNVGuBOGwhud6lo43ZvbAgMBAAGj
// SIG // ggGDMIIBfzAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH
// SIG // MAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/
// SIG // BAgwBgEB/wIBADBsBgNVHSAEZTBjMGEGC2CGSAGG+EUB
// SIG // BxcDMFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3lt
// SIG // YXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6
// SIG // Ly93d3cuc3ltYXV0aC5jb20vcnBhMDAGA1UdHwQpMCcw
// SIG // JaAjoCGGH2h0dHA6Ly9zMS5zeW1jYi5jb20vcGNhMy1n
// SIG // NS5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF
// SIG // BwMDMA4GA1UdDwEB/wQEAwIBBjApBgNVHREEIjAgpB4w
// SIG // HDEaMBgGA1UEAxMRU3ltYW50ZWNQS0ktMS01NjcwHQYD
// SIG // VR0OBBYEFJY7U/B5M5evfYPvLivMyreGHnJmMB8GA1Ud
// SIG // IwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
// SIG // SIb3DQEBCwUAA4IBAQAThRoeaak396C9pK9+HWFT/p2M
// SIG // XgymdR54FyPd/ewaA1U5+3GVx2Vap44w0kRaYdtwb9oh
// SIG // BcIuc7pJ8dGT/l3JzV4D4ImeP3Qe1/c4i6nWz7s1LzNY
// SIG // qJJW0chNO4LmeYQW/CiwsUfzHaI+7ofZpn+kVqU/rYQu
// SIG // Kd58vKiqoz0EAeq6k6IOUCIpF0yH5DoRX9akJYmbBWsv
// SIG // tMkBTCd7C6wZBSKgYBU/2sn7TUyP+3Jnd/0nlMe6NQ6I
// SIG // Sf6N/SivShK9DbOXBd5EDBX6NisD3MFQAfGhEV0U5eK9
// SIG // J0tUviuEXg+mw3QFCu+Xw4kisR93873NQ9TxTKk/tYuE
// SIG // r2Ty0BQhMYIEPDCCBDgCAQEwgZMwfzELMAkGA1UEBhMC
// SIG // VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9u
// SIG // MR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr
// SIG // MTAwLgYDVQQDEydTeW1hbnRlYyBDbGFzcyAzIFNIQTI1
// SIG // NiBDb2RlIFNpZ25pbmcgQ0ECEDB6NnqqPmiBpvlPCMs7
// SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
// SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
// SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
// SIG // DQEJBDEWBBSjuKnSDiT0pznq/5Lya8ASdHzJqDANBgkq
// SIG // hkiG9w0BAQEFAASCAQCHr4/oZ4LRlyWH2RqKXj+t/fgK
// SIG // KXhg/yNdxDrNcBRgnvscRY/zgZJTLUQN8nb+H+EQ7fll
// SIG // 9zBFci0W3k0mTFw4aAxjTEEgiD+whCYLpMoTYzAYDpOK
// SIG // iHmnxLKzMIqmIScBd8at++SBZnHJJOk12fIpK48BXGVi
// SIG // mSIc0wlPHtUj7QjfmBqDA4Vh6WXoUysytVgU95rzwpta
// SIG // c/RIWlN9QuUFmtrexO9INyzuzPQnnfdlB8NRwSvf5rtj
// SIG // kdNn0x8mKpFtKSQt8vvKMJpmXAbTxg7yHgyp9fBAaJCC
// SIG // LouoDXUDFMyljH+Wb9QL/9NOd1oAv3ZZTlDX0p39rc74
// SIG // nE/k0ZvhoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
// SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
// SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
// SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
// SIG // hvcNAQkFMQ8XDTE4MDkwNzA3NTkzNVowIwYJKoZIhvcN
// SIG // AQkEMRYEFP8tDNWrBtg4MAU9pTvU7o6mL/54MA0GCSqG
// SIG // SIb3DQEBAQUABIIBAAAV1et45BOKVTTsfa630ycQatM5
// SIG // BlkfQKxTSWACsOQHH3YgwDNA9aImZKc5CvdB0D5jry4a
// SIG // L7lCD2H71tLolQDX4Y2SHL/LbVt63rJETOFXsnNI7o6R
// SIG // WZvyGa1qyfxsIixMI8K8svCZLRhuXFveb55pYri7i/8L
// SIG // b8/6HGVP62YJGXiu5bvqUJaqpGAF9oh7PBimpNEDLtF0
// SIG // /kHU7VIixmcD/EZEB6U80luqFuhG86GY4ONZSFRXlquC
// SIG // +oLz3zY60eb68Xc2nL9iwNCL+f1/kB8O4netcm4d3kmR
// SIG // uNGbDAzGEkKpImqaBfpi6rLNyXmmmYHEgU3ExoHx8Qft
// SIG // dQkWpxU=
// SIG // End signature block // SIG // End signature block