##      Package LibPath Version Priority Depends Imports LinkingTo Suggests
##      Enhances License License_is_FOSS License_restricts_use OS_type Archs
##      MD5sum NeedsCompilation Built
## # A tibble: 6 × 10
##   Date                  VCB   MBB   BID   CTG   SHB   ACB   STB   EIB `VN-INDEX`
##   <dttm>              <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>      <dbl>
## 1 2024-12-31 00:00:00 91200 21826 37550 37800 10250 25800 36900 19300      1267.
## 2 2024-12-30 00:00:00 92000 21565 38250 38900 10250 25400 37850 19300      1272.
## 3 2024-12-27 00:00:00 92200 21783 39150 38800 10300 25550 37400 19450      1275.
## 4 2024-12-26 00:00:00 92100 21652 39000 38200 10300 25550 37100 19250      1273.
## 5 2024-12-25 00:00:00 92400 21261 38650 38200 10300 25450 36250 19500      1274.
## 6 2024-12-24 00:00:00 92100 20783 38100 36200 10250 25000 34700 19600      1260.
##      Package LibPath Version Priority Depends Imports LinkingTo Suggests
##      Enhances License License_is_FOSS License_restricts_use OS_type Archs
##      MD5sum NeedsCompilation Built

4.1. Giới thiệu chương

## $Giai_doan
## [1] "NA → NA"
## 
## $So_thang
## [1] 120
## 
## $Tan_suat
## [1] "Tháng"
## 
## $Thi_truong
## [1] "VN-INDEX"
## 
## $Ma_ngan_hang
## [1] "VCB" "MBB" "BID" "CTG" "SHB" "ACB" "STB" "EIB"

4.2. Thống kê mô tả

Bảng 4.2. Thống kê mô tả lợi suất tháng (đầy đủ)
Biến N Mean SD Min P01 P05 P25 Median P75 P95 P99 Max Mode (KDE) Skew Kurtosis(excess) W p
ACB 119 1.81% 8.29% -23.74% -17.11% -11.74% -2.16% 1.38% 5.42% 17.75% 23.41% 32.76% 0.71% 0.3712314 2.0205911 0.9576122 0.0008670
BID 119 1.59% 10.62% -32.20% -23.10% -16.24% -5.23% 1.15% 9.21% 16.89% 30.52% 34.12% -2.07% 0.0637016 0.9289345 0.9828682 0.1348748
CTG 119 1.49% 10.17% -33.20% -22.46% -15.09% -4.31% 1.47% 6.46% 17.59% 29.39% 30.15% 2.78% 0.1032437 1.2882661 0.9768578 0.0377783
EIB 119 0.98% 10.36% -40.54% -28.84% -13.05% -4.59% 0.71% 6.23% 19.72% 23.42% 36.57% 0.31% -0.1369978 2.7898517 0.9535348 0.0004219
MBB 119 1.72% 9.00% -33.58% -23.30% -12.44% -2.60% 1.07% 6.36% 16.73% 24.14% 25.59% 0.51% -0.3236355 1.9047846 0.9670056 0.0050653
SHB 119 1.46% 13.16% -35.45% -28.92% -13.74% -4.83% -0.61% 5.69% 21.36% 43.83% 71.23% -1.24% 1.6201155 7.0700566 0.8639273 0.0000000
STB 119 1.41% 11.27% -37.07% -21.19% -14.99% -5.22% 0.00% 8.40% 20.72% 26.38% 41.42% -1.23% 0.2615043 1.3986608 0.9780887 0.0489955
VCB 119 1.66% 8.16% -24.76% -16.43% -10.83% -2.60% 0.80% 6.45% 14.90% 22.11% 25.29% -1.17% 0.0790500 0.7964677 0.9787507 0.0563724
VN-INDEX 120 0.36% 7.84% -57.02% -22.37% -9.24% -1.47% 1.27% 3.74% 10.34% 13.66% 16.09% 1.53% -3.4797740 22.9171310 0.7479496 0.0000000

4.3. Ước lượng Camp

Bảng 4.3. Ước lượng CAPM: beta, alpha, R² và p-value
Ticker alpha beta p_alpha p_beta R2 Adj_R2
ACB 0.0104 0.8750 0.0888972 0.0000000 0.3770 0.3717
BID 0.0058 1.2815 0.4051925 0.0000000 0.4928 0.4885
CTG 0.0049 1.2873 0.4450955 0.0000000 0.5424 0.5385
EIB 0.0040 0.5260 0.6643711 0.0010985 0.0874 0.0796
MBB 0.0076 1.1896 0.1529214 0.0000000 0.5925 0.5890
SHB 0.0091 0.4681 0.4458490 0.0239065 0.0428 0.0347
STB 0.0044 1.2212 0.5901204 0.0000000 0.3978 0.3926
VCB 0.0079 1.0464 0.1185249 0.0000000 0.5564 0.5526

Công thức tổng quát \[ r_{i,t}-r_{f,t}=\alpha_i+\beta_i\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{i,t}. \]

Cụ thể \[ \begin{aligned} \text{ACB:}\quad & r_{\mathrm{ACB},t}-r_{f,t}=0.0104+0.8750\,\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{\mathrm{ACB},t},\\ \text{BID:}\quad & r_{\mathrm{BID},t}-r_{f,t}=0.0058+1.2815\,\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{\mathrm{BID},t},\\ \text{CTG:}\quad & r_{\mathrm{CTG},t}-r_{f,t}=0.0049+1.2873\,\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{\mathrm{CTG},t},\\ \text{EIB:}\quad & r_{\mathrm{EIB},t}-r_{f,t}=0.0040+0.5260\,\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{\mathrm{EIB},t},\\ \text{MBB:}\quad & r_{\mathrm{MBB},t}-r_{f,t}=0.0076+1.1896\,\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{\mathrm{MBB},t},\\ \text{SHB:}\quad & r_{\mathrm{SHB},t}-r_{f,t}=0.0091+0.4681\,\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{\mathrm{SHB},t},\\ \text{STB:}\quad & r_{\mathrm{STB},t}-r_{f,t}=0.0044+1.2212\,\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{\mathrm{STB},t},\\ \text{VCB:}\quad & r_{\mathrm{VCB},t}-r_{f,t}=0.0079+1.0464\,\big(r_{M,t}-r_{f,t}\big)+\varepsilon_{\mathrm{VCB},t}. \end{aligned} \]

4.4. Lợi suất kỳ vọng CAPM & phân loại định giá

Bảng 4.4. Lợi suất kỳ vọng theo CAPM & phân loại định giá
Beta Alpha Lợi suất TB (tháng) E[Ri]_CAPM Định giá
ACB 0.8750290 0.0103877 0.3770026 1.81% 0.35% Undervalued (α > 0)
BID 1.2814697 0.0058458 0.4928495 1.59% 0.38% Undervalued (α > 0)
CTG 1.2873106 0.0048765 0.5424456 1.49% 0.38% Undervalued (α > 0)
EIB 0.5260171 0.0039804 0.0873876 0.98% 0.33% Undervalued (α > 0)
MBB 1.1896159 0.0076403 0.5925028 1.72% 0.38% Undervalued (α > 0)
SHB 0.4681216 0.0091110 0.0428429 1.46% 0.32% Undervalued (α > 0)
STB 1.2211863 0.0043691 0.3977656 1.41% 0.38% Undervalued (α > 0)
VCB 1.0464024 0.0079091 0.5564065 1.66% 0.37% Undervalued (α > 0)

LS0tCnRpdGxlOiAiVMOgaSBjaMOtbmggMiIKYXV0aG9yOiAiUGjhuqFtIFh1w6JuIEhvYW4gIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jOiB0cnVlCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAnNCcKICBwZGZfZG9jdW1lbnQ6CiAgICBsYXRleF9lbmdpbmU6IHhlbGF0ZXgKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAoJZWNobyA9IEZBTFNFLAoJbWVzc2FnZSA9IEZBTFNFLAoJd2FybmluZyA9IEZBTFNFCikKYGBgCgo8c3R5bGU+CmJvZHkgewogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE2cHg7CiAgdGV4dC1hbGlnbjoganVzdGlmeTsKICBsaW5lLWhlaWdodDogMS41Owp9CmgyIHsKICBjb2xvcjogcmVkOwp9CmgzIHsKICBjb2xvcjogZGFya2JsdWU7Cn0KPC9zdHlsZT4KCmBgYHtyfQppbnN0YWxsZWQucGFja2FnZXMoInhsc3giKQpsaWJyYXJ5KG9wZW54bHN4KQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShEVCkKbGlicmFyeShwYW5kZXIpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShza2ltcikKbGlicmFyeShwc3ljaCkKbGlicmFyeShmb3JtYXR0YWJsZSkKbGlicmFyeShodG1sdG9vbHMpCmxpYnJhcnkoRGVzY1Rvb2xzKQpsaWJyYXJ5KGVwaXRvb2xzKQpsaWJyYXJ5KHBST0MpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKYGBge3J9CgojIDEuIMSQ4buNYyBmaWxlIEV4Y2VsCmRhdGEgPC0gcmVhZF9leGNlbCgiL1VzZXJzL3BoYW14dWFuaG9hbi9Eb2N1bWVudHMvVGllzILMiXUgbHVhzKPMgm4gL8SQacyjbmggZ2lhzIEgdGHMgGkgc2HMiW4gdGHMgGkgY2hpzIFuaCAyL0R1zJvMgyBsaWXMo8yCdS54bHN4IikKCmhlYWQoZGF0YSkKYGBgCgpgYGB7cn0KIyBQYWNrYWdlcyAmIHRoYW0gc+G7kQppbnN0YWxsZWQucGFja2FnZXMoInpvbyIpCmxpYnJhcnkoZHBseXIpOyBsaWJyYXJ5KHRpZHlyKTsgbGlicmFyeSh6b28pCmxpYnJhcnkoYnJvb20pOyBsaWJyYXJ5KG1vbWVudHMpOyBsaWJyYXJ5KHNjYWxlcyk7IGxpYnJhcnkoa25pdHIpCgojIEPhu5l0IHRo4buLIHRyxrDhu51uZyAmIGRhbmggc8OhY2ggbcOjCm1hcmtldF9jb2wgPC0gbmFtZXMoZGF0YSlbZ3JlcGwoIlZOLipJTkRFWCIsIG5hbWVzKGRhdGEpLCBpZ25vcmUuY2FzZSA9IFRSVUUpXVsxXQpzdG9waWZub3QoIWlzLm5hKG1hcmtldF9jb2wpKQp0aWNrZXJzIDwtIHNldGRpZmYobmFtZXMoZGF0YSksIGMoIkRhdGUiLCBtYXJrZXRfY29sLCAiUmYiLCAiUkYiLCAicmYiKSkKCiMgTuG6v3UgQ0jGr0EgY8OzIGNodeG7l2kgUmYgdGhlbyB0aMOhbmcgdHJvbmcgZOG7ryBsaeG7h3U6CnJmX2FubnVhbCA8LSAwLjAzNSAgICAgICAgICAgICAgICAgICAgICAgICMgY2jhu4luaCB04bqhaSDEkcOieSBu4bq/dSBtdeG7kW4KcmZfbW9udGhseV9jb25zdCA8LSAoMSArIHJmX2FubnVhbCleKDEvMTIpIC0gMQoKYGBgCgojIDQuMS4gR2nhu5tpIHRoaeG7h3UgY2jGsMahbmcKCmBgYHtyfQojIEdpw6EgY3Xhu5FpIHRow6FuZwpwcmljZXNfbSA8LSBkYXRhICU+JQogIGFycmFuZ2UoRGF0ZSkgJT4lCiAgbXV0YXRlKHltID0gYXMueWVhcm1vbihEYXRlKSkgJT4lCiAgZ3JvdXBfYnkoeW0pICU+JQogIHN1bW1hcmlzZShhY3Jvc3MoYWxsX29mKGModGlja2VycywgbWFya2V0X2NvbCkpLCB+IGRwbHlyOjpsYXN0KG5hLm9taXQoLngpKSksCiAgICAgICAgICAgIC5ncm91cHMgPSAiZHJvcCIpCgojIEzhu6NpIHN14bqldCB0aMOhbmcgKHNpbXBsZSkKcmV0c19tIDwtIHByaWNlc19tICU+JQogIGFycmFuZ2UoeW0pICU+JQogIG11dGF0ZShhY3Jvc3MoYWxsX29mKGModGlja2VycywgbWFya2V0X2NvbCkpLCB+IC54L2xhZygueCkgLSAxKSkgJT4lCiAgc2xpY2UoLTEpCgojIFRow7RuZyB0aW4gbeG6q3UgKGluIHJhIMSR4buDIGNow6huIHbDoG8gYsOhbyBjw6FvKQpzYW1wbGVfaW5mbyA8LSBsaXN0KAogIEdpYWlfZG9hbiA9IHBhc3RlMChhcy5jaGFyYWN0ZXIobWluKHByaWNlc19tJHltKSksICIg4oaSICIsIGFzLmNoYXJhY3RlcihtYXgocHJpY2VzX20keW0pKSksCiAgU29fdGhhbmcgID0gbnJvdyhyZXRzX20pLAogIFRhbl9zdWF0ICA9ICJUaMOhbmciLAogIFRoaV90cnVvbmc9IG1hcmtldF9jb2wsCiAgTWFfbmdhbl9oYW5nID0gdGlja2VycwopCnNhbXBsZV9pbmZvCgpgYGAKCgojIDQuMi4gVGjhu5FuZyBrw6ogbcO0IHThuqMKCmBgYHtyfQojIEhlbHBlcnM6IE1vZGUgY2hvIGJp4bq/biBsacOqbiB04bulYyAmIFNoYXBpcm8gYW4gdG/DoG4KbW9kZV9rZGUgPC0gZnVuY3Rpb24oeCl7CiAgeCA8LSBuYS5vbWl0KHgpOyBpZiAobGVuZ3RoKHgpIDwgMykgcmV0dXJuKE5BX3JlYWxfKQogIGQgPC0gZGVuc2l0eSh4KTsgZCR4W3doaWNoLm1heChkJHkpXQp9CnNoYXBpcm9fc2FmZSA8LSBmdW5jdGlvbih4KXsKICB4IDwtIG5hLm9taXQoeCkKICBpZiAobGVuZ3RoKHVuaXF1ZSh4KSkgPCAzIHx8IGxlbmd0aCh4KSA8IDMgfHwgbGVuZ3RoKHgpID4gNTAwMCkgcmV0dXJuKGMoVz1OQSxwPU5BKSkKICBzIDwtIHNoYXBpcm8udGVzdCh4KTsgYyhXPXVubmFtZShzJHN0YXRpc3RpYyksIHA9dW5uYW1lKHMkcC52YWx1ZSkpCn0KCmRlc2NfdGJsIDwtIHJldHNfbSAlPiUKICBzZWxlY3QoeW0sIGFsbF9vZihjKHRpY2tlcnMsIG1hcmtldF9jb2wpKSkgJT4lCiAgcGl2b3RfbG9uZ2VyKC15bSwgbmFtZXNfdG8gPSAiVmFyIiwgdmFsdWVzX3RvID0gInJldCIpICU+JQogIGdyb3VwX2J5KFZhcikgJT4lCiAgc3VtbWFyaXNlKAogICAgTiA9IHN1bSghaXMubmEocmV0KSksCiAgICBNZWFuID0gbWVhbihyZXQsIG5hLnJtPVRSVUUpLAogICAgU0QgICA9IHNkKHJldCwgICBuYS5ybT1UUlVFKSwKICAgIE1pbiAgPSBtaW4ocmV0LCAgbmEucm09VFJVRSksCiAgICBQMDEgID0gcXVhbnRpbGUocmV0LCAuMDEsIG5hLnJtPVRSVUUpLAogICAgUDA1ICA9IHF1YW50aWxlKHJldCwgLjA1LCBuYS5ybT1UUlVFKSwKICAgIFAyNSAgPSBxdWFudGlsZShyZXQsIC4yNSwgbmEucm09VFJVRSksCiAgICBNZWRpYW49cXVhbnRpbGUocmV0LCAuNTAsIG5hLnJtPVRSVUUpLAogICAgUDc1ICA9IHF1YW50aWxlKHJldCwgLjc1LCBuYS5ybT1UUlVFKSwKICAgIFA5NSAgPSBxdWFudGlsZShyZXQsIC45NSwgbmEucm09VFJVRSksCiAgICBQOTkgID0gcXVhbnRpbGUocmV0LCAuOTksIG5hLnJtPVRSVUUpLAogICAgTWF4ICA9IG1heChyZXQsICBuYS5ybT1UUlVFKSwKICAgIE1vZGUgPSBtb2RlX2tkZShyZXQpLAogICAgU2tldyA9IGlmZWxzZShOPj0zLCBtb21lbnRzOjpza2V3bmVzcyhyZXQsIG5hLnJtPVRSVUUpLCBOQV9yZWFsXyksCiAgICBLdXJ0b3Npc0UgPSBpZmVsc2UoTj49NCwgbW9tZW50czo6a3VydG9zaXMocmV0LCBuYS5ybT1UUlVFKSAtIDMsIE5BX3JlYWxfKSwKICAgIFNoYXBpcm9XICA9IHtzaCA8LSBzaGFwaXJvX3NhZmUocmV0KTsgc2hbIlciXX0sCiAgICBTaGFwaXJvX3AgPSB7c2ggPC0gc2hhcGlyb19zYWZlKHJldCk7IHNoWyJwIl19LAogICAgLmdyb3VwcyA9ICJkcm9wIgogICkgJT4lIGFycmFuZ2UoVmFyKQoKIyBC4bqjbmcgdHLDrG5oIGLDoHkgKMSR4buLbmggZOG6oW5nICUgY2hvIGPDoWMgdOG7iSBzdeG6pXQpCmRlc2NfZm10IDwtIGRlc2NfdGJsICU+JQogIG11dGF0ZShhY3Jvc3MoYyhNZWFuLFNELE1pbixQMDEsUDA1LFAyNSxNZWRpYW4sUDc1LFA5NSxQOTksTWF4LE1vZGUpLAogICAgICAgICAgICAgICAgfiBzY2FsZXM6OnBlcmNlbnQoLngsIGFjY3VyYWN5ID0gMC4wMSkpKQprbml0cjo6a2FibGUoCiAgZGVzY19mbXQsCiAgYWxpZ24gPSAibHJycnJycnJycnJycnJycnIiLAogIGNvbC5uYW1lcyA9IGMoIkJp4bq/biIsIk4iLCJNZWFuIiwiU0QiLCJNaW4iLCJQMDEiLCJQMDUiLCJQMjUiLCJNZWRpYW4iLAogICAgICAgICAgICAgICAgIlA3NSIsIlA5NSIsIlA5OSIsIk1heCIsIk1vZGUgKEtERSkiLCJTa2V3IiwiS3VydG9zaXMoZXhjZXNzKSIsIlciLCJwIiksCiAgY2FwdGlvbiA9ICJC4bqjbmcgNC4yLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBs4bujaSBzdeG6pXQgdGjDoW5nICjEkeG6p3kgxJHhu6cpIgopCgpgYGAKCmBgYHtyfQojIC0tLSBTTUwgcm9idXN0OiB04buxIHTDrW5oIGJldGEgJiBtZWFuIG7hur91IHRoaeG6v3UgLS0tCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShkcGx5cik7IGxpYnJhcnkodGlkeXIpOyBsaWJyYXJ5KHpvbykKICBsaWJyYXJ5KGdncGxvdDIpOyBsaWJyYXJ5KHNjYWxlcykKfSkKCiMgMCkgTmjhuq1uIGRp4buHbiBjw6FjIGPhu5l0IGPhuqduIHRoaeG6v3QKaWYgKCFleGlzdHMoIm1hcmtldF9jb2wiKSB8fCBpcy5uYShtYXJrZXRfY29sKSkgewogIG1hcmtldF9jb2wgPC0gbmFtZXMoZGF0YSlbZ3JlcGwoIlZOLipJTkRFWCIsIG5hbWVzKGRhdGEpLCBpZ25vcmUuY2FzZSA9IFRSVUUpXVsxXQp9CmlmICghZXhpc3RzKCJyZXRzX20iKSkgewogIGRhdGVfY29sIDwtIG5hbWVzKGRhdGEpW2dyZXBsKCJeKE5nw6B5fE5Hw4BZfERhdGV8REFURSkkIiwgbmFtZXMoZGF0YSkpXVsxXQogIHRpY2tlcnMgIDwtIHNldGRpZmYobmFtZXMoZGF0YSksIGMoZGF0ZV9jb2wsIG1hcmtldF9jb2wsICJSZiIsIlJGIiwicmYiKSkKICBwcmljZXNfbSA8LSBkYXRhICU+JQogICAgYXJyYW5nZSguZGF0YVtbZGF0ZV9jb2xdXSkgJT4lCiAgICBtdXRhdGUoeW0gPSB6b286OmFzLnllYXJtb24oLmRhdGFbW2RhdGVfY29sXV0pKSAlPiUKICAgIGdyb3VwX2J5KHltKSAlPiUKICAgIHN1bW1hcmlzZShhY3Jvc3MoYWxsX29mKGModGlja2VycywgbWFya2V0X2NvbCkpLAogICAgICAgICAgICAgICAgICAgICB+IGRwbHlyOjpsYXN0KG5hLm9taXQoLngpKSksIC5ncm91cHMgPSAiZHJvcCIpCiAgcmV0c19tIDwtIHByaWNlc19tICU+JQogICAgYXJyYW5nZSh5bSkgJT4lCiAgICBtdXRhdGUoYWNyb3NzKGFsbF9vZihjKHRpY2tlcnMsIG1hcmtldF9jb2wpKSwgfiAueC9sYWcoLngpIC0gMSkpICU+JQogICAgc2xpY2UoLTEpCn0KaWYgKCFleGlzdHMoInRpY2tlcnMiKSkgewogIGRhdGVfY29sIDwtIG5hbWVzKGRhdGEpW2dyZXBsKCJeKE5nw6B5fE5Hw4BZfERhdGV8REFURSkkIiwgbmFtZXMoZGF0YSkpXVsxXQogIHRpY2tlcnMgIDwtIHNldGRpZmYobmFtZXMoZGF0YSksIGMoZGF0ZV9jb2wsIG1hcmtldF9jb2wsICJSZiIsIlJGIiwicmYiKSkKfQoKIyAxKSBSZiB0aMOhbmcKaWYgKCJSZiIgJWluJSBuYW1lcyhyZXRzX20pKSB7CiAgcmZfbSA8LSByZXRzX20kUmYKfSBlbHNlIGlmICghZXhpc3RzKCJyZl9tIikpIHsKICByZl9hbm51YWwgPC0gMC4wMzUKICByZl9tIDwtIHJlcCgoMSArIHJmX2FubnVhbCleKDEvMTIpIC0gMSwgbnJvdyhyZXRzX20pKQp9CgojIDIpIEJldGEgdGhlbyBDQVBNIChPTFMgdOG7q25nIG3DoykgbuG6v3UgdGhp4bq/dSBjYXBtX3JlcwpSbV9leCA8LSByZXRzX21bW21hcmtldF9jb2xdXSAtIHJmX20KZ2V0X2JldGEgPC0gZnVuY3Rpb24oeV9leCwgeCkgY29lZihsbSh5X2V4IH4geCkpWzJdCmJldGFzIDwtIHNhcHBseSh0aWNrZXJzLCBmdW5jdGlvbih0ayl7CiAgeV9leCA8LSByZXRzX21bW3RrXV0gLSByZl9tCiAgZ2V0X2JldGEoeV9leCwgUm1fZXgpCn0pCmNhcG1fcmVzIDwtIHRpYmJsZShUaWNrZXIgPSB0aWNrZXJzLCBiZXRhID0gYXMubnVtZXJpYyhiZXRhcykpCgojIDMpIEzhu6NpIHN14bqldCBUQiB0aMOhbmcgdGjhu7FjIHThur8KbWVhbnMgPC0gY29sTWVhbnMocmV0c19tWywgdGlja2Vyc10sIG5hLnJtID0gVFJVRSkKcGxvdF9kZiA8LSBjYXBtX3JlcyAlPiUKICBsZWZ0X2pvaW4odGliYmxlKFRpY2tlciA9IHRpY2tlcnMsIE1lYW4gPSBhcy5udW1lcmljKG1lYW5zKSksIGJ5ID0gIlRpY2tlciIpCgojIDQpIFRoYW0gc+G7kSAmIMSRxrDhu51uZyBTTUwKcmZfdXNlZCAgICAgPC0gbWVhbihyZl9tLCAgbmEucm0gPSBUUlVFKQpta3RfcHJlbWl1bSA8LSBtZWFuKFJtX2V4LCBuYS5ybSA9IFRSVUUpCmJtaW4gPC0gbWluKHBsb3RfZGYkYmV0YSwgbmEucm0gPSBUUlVFKSAtIDAuMDUKYm1heCA8LSBtYXgocGxvdF9kZiRiZXRhLCBuYS5ybSA9IFRSVUUpICsgMC4wNQpzbWxfZGYgPC0gZGF0YS5mcmFtZShiZXRhID0gYyhibWluLCBibWF4KSwKICAgICAgICAgICAgICAgICAgICAgeSAgICA9IHJmX3VzZWQgKyBjKGJtaW4sIGJtYXgpICogbWt0X3ByZW1pdW0pCgp5bWluIDwtIG1pbihjKHBsb3RfZGYkTWVhbiwgc21sX2RmJHkpLCBuYS5ybSA9IFRSVUUpCnltYXggPC0gbWF4KGMocGxvdF9kZiRNZWFuLCBzbWxfZGYkeSksIG5hLnJtID0gVFJVRSkKCmBgYAoKCiMgNC4zLiDGr+G7m2MgbMaw4bujbmcgQ2FtcAoKYGBge3J9CiMgUmYgdGhlbyB0aMOhbmcgKGTDuW5nIGPhu5l0IFJmIG7hur91IMSRw6MgY8OzOyBuZ8aw4bujYyBs4bqhaSBkw7luZyB0aGFtIHPhu5Eg4bufIHBo4bqnbiBjaHXhuqluIGLhu4spCnJmX20gPC0gaWYgKCJSZiIgJWluJSBuYW1lcyhyZXRzX20pKSByZXRzX20kUmYgZWxzZSByZXAocmZfbW9udGhseV9jb25zdCwgbnJvdyhyZXRzX20pKQpSbV9leCA8LSByZXRzX21bW21hcmtldF9jb2xdXSAtIHJmX20KCmZpdF9vbmUgPC0gZnVuY3Rpb24oeV9leCwgcm1fZXgpewogIGZpdCA8LSBsbSh5X2V4IH4gcm1fZXgpCiAgdGliYmxlKGFscGhhID0gY29lZihmaXQpWzFdLAogICAgICAgICBiZXRhICA9IGNvZWYoZml0KVsyXSwKICAgICAgICAgcF9hbHBoYSA9IHN1bW1hcnkoZml0KSRjb2VmZmljaWVudHNbMSw0XSwKICAgICAgICAgcF9iZXRhICA9IHN1bW1hcnkoZml0KSRjb2VmZmljaWVudHNbMiw0XSwKICAgICAgICAgUjIgPSBzdW1tYXJ5KGZpdCkkci5zcXVhcmVkLAogICAgICAgICBBZGpfUjIgPSBzdW1tYXJ5KGZpdCkkYWRqLnIuc3F1YXJlZCkKfQoKY2FwbV9yZXMgPC0gcHVycnI6Om1hcF9kZnIodGlja2VycywgZnVuY3Rpb24odGspewogIHlfZXggPC0gcmV0c19tW1t0a11dIC0gcmZfbQogIG91dCA8LSBmaXRfb25lKHlfZXgsIFJtX2V4KTsgb3V0JFRpY2tlciA8LSB0azsgb3V0Cn0pICU+JSBzZWxlY3QoVGlja2VyLCBhbHBoYSwgYmV0YSwgcF9hbHBoYSwgcF9iZXRhLCBSMiwgQWRqX1IyKSAlPiUKICBhcnJhbmdlKFRpY2tlcikKCmtuaXRyOjprYWJsZSgKICBjYXBtX3JlcyAlPiUgbXV0YXRlKGFjcm9zcyhjKGFscGhhLGJldGEsUjIsQWRqX1IyKSwgfiByb3VuZCgueCwgNCkpKSwKICBjYXB0aW9uID0gIkLhuqNuZyA0LjMuIMav4bubYyBsxrDhu6NuZyBDQVBNOiBiZXRhLCBhbHBoYSwgUsKyIHbDoCBwLXZhbHVlIgopCgpgYGAKCgoqKkPDtG5nIHRo4bupYyB04buVbmcgcXXDoXQqKgpcWwpyX3tpLHR9LXJfe2YsdH09XGFscGhhX2krXGJldGFfaVxiaWcocl97TSx0fS1yX3tmLHR9XGJpZykrXHZhcmVwc2lsb25fe2ksdH0uClxdCgoqKkPhu6UgdGjhu4MqKgpcWwpcYmVnaW57YWxpZ25lZH0KXHRleHR7QUNCOn1ccXVhZCAmIHJfe1xtYXRocm17QUNCfSx0fS1yX3tmLHR9PTAuMDEwNCswLjg3NTBcLFxiaWcocl97TSx0fS1yX3tmLHR9XGJpZykrXHZhcmVwc2lsb25fe1xtYXRocm17QUNCfSx0fSxcXApcdGV4dHtCSUQ6fVxxdWFkICYgcl97XG1hdGhybXtCSUR9LHR9LXJfe2YsdH09MC4wMDU4KzEuMjgxNVwsXGJpZyhyX3tNLHR9LXJfe2YsdH1cYmlnKStcdmFyZXBzaWxvbl97XG1hdGhybXtCSUR9LHR9LFxcClx0ZXh0e0NURzp9XHF1YWQgJiByX3tcbWF0aHJte0NUR30sdH0tcl97Zix0fT0wLjAwNDkrMS4yODczXCxcYmlnKHJfe00sdH0tcl97Zix0fVxiaWcpK1x2YXJlcHNpbG9uX3tcbWF0aHJte0NUR30sdH0sXFwKXHRleHR7RUlCOn1ccXVhZCAmIHJfe1xtYXRocm17RUlCfSx0fS1yX3tmLHR9PTAuMDA0MCswLjUyNjBcLFxiaWcocl97TSx0fS1yX3tmLHR9XGJpZykrXHZhcmVwc2lsb25fe1xtYXRocm17RUlCfSx0fSxcXApcdGV4dHtNQkI6fVxxdWFkICYgcl97XG1hdGhybXtNQkJ9LHR9LXJfe2YsdH09MC4wMDc2KzEuMTg5NlwsXGJpZyhyX3tNLHR9LXJfe2YsdH1cYmlnKStcdmFyZXBzaWxvbl97XG1hdGhybXtNQkJ9LHR9LFxcClx0ZXh0e1NIQjp9XHF1YWQgJiByX3tcbWF0aHJte1NIQn0sdH0tcl97Zix0fT0wLjAwOTErMC40NjgxXCxcYmlnKHJfe00sdH0tcl97Zix0fVxiaWcpK1x2YXJlcHNpbG9uX3tcbWF0aHJte1NIQn0sdH0sXFwKXHRleHR7U1RCOn1ccXVhZCAmIHJfe1xtYXRocm17U1RCfSx0fS1yX3tmLHR9PTAuMDA0NCsxLjIyMTJcLFxiaWcocl97TSx0fS1yX3tmLHR9XGJpZykrXHZhcmVwc2lsb25fe1xtYXRocm17U1RCfSx0fSxcXApcdGV4dHtWQ0I6fVxxdWFkICYgcl97XG1hdGhybXtWQ0J9LHR9LXJfe2YsdH09MC4wMDc5KzEuMDQ2NFwsXGJpZyhyX3tNLHR9LXJfe2YsdH1cYmlnKStcdmFyZXBzaWxvbl97XG1hdGhybXtWQ0J9LHR9LgpcZW5ke2FsaWduZWR9ClxdCgoKCgojIDQuNC4gTOG7o2kgc3XhuqV0IGvhu7MgduG7jW5nIENBUE0gJiBwaMOibiBsb+G6oWkgxJHhu4tuaCBnacOhCgpgYGB7cn0KIyBQaOG6p24gYsO5IHLhu6dpIHJvIHRo4buLIHRyxrDhu51uZyAmIFJmIGLDrG5oIHF1w6JuIHRow6FuZwpta3RfcHJlbWl1bSA8LSBtZWFuKFJtX2V4LCBuYS5ybSA9IFRSVUUpICAjIEVbUm0gLSBSZl0KcmZfdXNlZCAgICAgPC0gbWVhbihyZl9tLCAgbmEucm0gPSBUUlVFKSAgIyBFW1JmXQoKIyBM4bujaSBzdeG6pXQgVEIgdGjhu7FjIHThur8gdGhlbyB0aMOhbmcgKGzhuqV5IHThu6sgNC4yLjIpCnJlYWxpemVkX21lYW4gPC0gZGVzY190YmwgJT4lIHNlbGVjdChWYXIsIE1lYW4pICU+JSBmaWx0ZXIoVmFyICVpbiUgdGlja2VycykKCmNhcG1fZXZhbCA8LSBjYXBtX3JlcyAlPiUKICBtdXRhdGUoRXhwX0NBUE0gPSByZl91c2VkICsgYmV0YSAqIG1rdF9wcmVtaXVtKSAlPiUKICBsZWZ0X2pvaW4ocmVhbGl6ZWRfbWVhbiwgYnkgPSBjKCJUaWNrZXIiID0gIlZhciIpKSAlPiUKICBtdXRhdGUoCiAgICBTaWduYWwgPSBjYXNlX3doZW4oCiAgICAgIE1lYW4gPiBFeHBfQ0FQTSB+ICJVbmRlcnZhbHVlZCAozrEgPiAwKSIsCiAgICAgIE1lYW4gPCBFeHBfQ0FQTSB+ICJPdmVydmFsdWVkICjOsSA8IDApIiwKICAgICAgVFJVRSAgICAgICAgICAgIH4gIkZhaXIiCiAgICApLAogICAgTWVhbiAgICAgPSBzY2FsZXM6OnBlcmNlbnQoTWVhbiwgICAgIDAuMDEpLAogICAgRXhwX0NBUE0gPSBzY2FsZXM6OnBlcmNlbnQoRXhwX0NBUE0sIDAuMDEpCiAgKSAlPiUKICBzZWxlY3QoVGlja2VyLCBiZXRhLCBhbHBoYSwgUjIsIGBMb2lfc3VhdF9UQl90aGFuZ2AgPSBNZWFuLAogICAgICAgICBgRV9SaV9DQVBNYCA9IEV4cF9DQVBNLCBTaWduYWwpCgprbml0cjo6a2FibGUoCiAgY2FwbV9ldmFsLAogIGNvbC5uYW1lcyA9IGMoIk3DoyIsIkJldGEiLCJBbHBoYSIsIlLCsiIsIkzhu6NpIHN14bqldCBUQiAodGjDoW5nKSIsIkVbUmldX0NBUE0iLCLEkOG7i25oIGdpw6EiKSwKICBjYXB0aW9uID0gIkLhuqNuZyA0LjQuIEzhu6NpIHN14bqldCBr4buzIHbhu41uZyB0aGVvIENBUE0gJiBwaMOibiBsb+G6oWkgxJHhu4tuaCBnacOhIgopCgpgYGAKCmBgYHtyfQojIELhuqNuZyBzYWkgbOG7h2NoIMSR4buLbmggZ2nDoSB0aGVvIHRow6FuZyAo4omIIGFscGhhKQpsaWJyYXJ5KGRwbHlyKTsgbGlicmFyeShnZ3Bsb3QyKTsgbGlicmFyeShzY2FsZXMpCgpyZl91c2VkICAgICA8LSBtZWFuKHJmX20sICBuYS5ybSA9IFRSVUUpCm1rdF9wcmVtaXVtIDwtIG1lYW4ocmV0c19tW1ttYXJrZXRfY29sXV0gLSByZl9tLCBuYS5ybSA9IFRSVUUpCgptaXNfZGYgPC0gY2FwbV9yZXMgJT4lCiAgc2VsZWN0KFRpY2tlciwgYmV0YSkgJT4lCiAgbGVmdF9qb2luKGRlc2NfdGJsICU+JSBmaWx0ZXIoVmFyICVpbiUgdGlja2VycykgJT4lCiAgICAgICAgICAgICAgdHJhbnNtdXRlKFRpY2tlciA9IFZhciwgTWVhbiksIGJ5ID0gIlRpY2tlciIpICU+JQogIG11dGF0ZShFX0NBUE0gPSByZl91c2VkICsgYmV0YSpta3RfcHJlbWl1bSwKICAgICAgICAgTWlzcHJpY2luZyA9IE1lYW4gLSBFX0NBUE0pICU+JQogIGFycmFuZ2UoZGVzYyhNaXNwcmljaW5nKSkKCmdncGxvdChtaXNfZGYsIGFlcyh4ID0gcmVvcmRlcihUaWNrZXIsIE1pc3ByaWNpbmcpLCB5ID0gTWlzcHJpY2luZywgZmlsbCA9IE1pc3ByaWNpbmcgPiAwKSkgKwogIGdlb21fY29sKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGxhYmVsX3BlcmNlbnQoYWNjdXJhY3kgPSAwLjAxKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIlRSVUUiPSIjMmM3ZmI4IiwiRkFMU0UiPSIjZGUyZDI2IiksIGd1aWRlID0gIm5vbmUiKSArCiAgbGFicyh0aXRsZSA9ICJTYWkgbOG7h2NoIMSR4buLbmggZ2nDoSB0aGVvIENBUE0gKHRow6FuZykiLAogICAgICAgc3VidGl0bGUgPSAiTWlzcHJpY2luZyDiiYggyJIgLSAoyJJmICsgzrLCt01SUMyEKSAg4oaSIGTGsMahbmc6IM6xPjAiLAogICAgICAgeCA9IE5VTEwsIHkgPSAiTWlzcHJpY2luZyAo4omIIM6xKSIpICsKICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEyKQoKYGBgCgpgYGB7cn0KY3NfZGYgIDwtIG1pc19kZlssIGMoIlRpY2tlciIsImJldGEiLCJNZWFuIildCmdncGxvdChjc19kZiwgYWVzKGJldGEsIE1lYW4sIGxhYmVsID0gVGlja2VyKSkgKwogIGdlb21fcG9pbnQoc2l6ZT0zKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsIHNlPVRSVUUsIGNvbG9yPSJncmV5MzAiKSArCiAgZ2VvbV90ZXh0KHZqdXN0PS0wLjksIHNpemU9MykgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBsYWJlbF9wZXJjZW50KDAuMDEpKSArCiAgbGFicyh0aXRsZT0iU01MIHRo4buxYyBuZ2hp4buHbSAoY3Jvc3Mtc2VjdGlvbikiLAogICAgICAgeD0iQmV0YSIsIHk9Ikzhu6NpIHN14bqldCBUQiB0aMOhbmciKSArCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMikKCmBgYAoKCg==