Library:

> # install.packages("knitr")
> # install.packages("rmarkdown")
> # install.packages("prettydoc")
> # install.packages("equatiomatic")
> # library(knitr)
> # library(rmarkdown)
> # library(prettydoc)
> # library(equatiomatic)

PENDAHULUAN

Latar Belakang

Analisis multivariat merupakan metode statistik yang digunakan untuk menganalisis data yang memiliki lebih dari dua variabel secara bersamaan. Metode ini penting karena dalam dunia nyata, permasalahan yang dihadapi seringkali melibatkan banyak variabel yang berkaitan. Analisis multivariat digunakan untuk memahami hubungan dan pola di antara variabel-variabel tersebut secara simultan.

Salah satu teknik analisis multivariat yang banyak digunakan adalah Multidimensional Scaling (MDS). MDS bertujuan untuk merepresentasikan objek-objek dalam bentuk titik-titik pada ruang berdimensi rendah berdasarkan jarak atau kemiripan antar objek. Objek yang dianalisis pada praktikum ini adalah 38 provinsi di Indonesia dengan variabel-variabel ekonomi dan sosial seperti Upah Minimum Regional (UMR), Tingkat Partisipasi Angkatan Kerja (TPAK), dan Indeks Harga Konsumen (IHK). Menggunakan MDS, diharapkan dapat diperoleh gambaran posisi relatif antar provinsi serta pengukuran kualitas representatif tersebut melalui nilai stress.

Rumusan Masalah

Berdasarkan latar belakang, dapat dirumuskan permasalahan sebagai berikut:

  1. bagaimana jarak kemiripan antar 38 provinsi berdasarkan variabel UMR, TPAK, dan IHK?
  2. Bagaimana visualisasi koordinat setiap provinsi pada plot Multidimensional Scaling?
  3. Berapa nilai stress yang diperoleh dari pemodelan Multidimensional Scaling (MDS) dan seberapa baik representasi data dalam dimensi rendah?

Tujuan Penelitian

Tujuan dari penelitian praktikum ini adalah sebagai berikut:

  1. Menentukan jarak atau kemiripan antar provinsi berdasarkan variabel UMR, TPAK, dan IHK
  2. Menghasilkan plot koordinat yang merepresentasikan posisi setiap provinsi dalam ruang berdimensi rendah melalui metode Multidimensional Scaling (MDS)
  3. Menghitung dan mengevaluasi nilai stress sebagai indikator kualitas hasil Multidimensional Scaling (MDS)

Tinjauan Pustaka

Multidimensional Scaling (MDS)

Multidimensional Scaling (MDS) adalah metode yang digunakan untuk merepresentasikan kesamaan atau ketidaksamaan jarak perbedaan antar objek (Suryabrata, 2000). Semakin mirip suatu objek dengan objek lainnya, semakin dekat jarak antar-objek tersebut. Sebaliknya, semakin jauh jarak antar-objek, semakin besar perbedaan atau ketidaksamaannya

Jenis-jenis Multidimensional Scaling (MDS)

Jenis Multidimensional Scaling (MDS) berdasarkan skala data terbagi menjadi dua bentuk utama, yaitu MDS metrik untuk skala data interval atau rasio dan MDS non-metrik untuk skala data nominal atau ordinal. Kedua pendekatan ini berbeda dalam cara mengolah data jarak atau ketidakmiripan serta asumsi yang digunakan dalam proses pemetaan

Multidimensional Scaling Metrik

Multidimensional Scaling Metrik adalah pendekatan MDS yang menggunakan data jarak atau ketidakmiripan berskala interval atau rasio. Pada metode ini, hubungan antara jarak asli dengan jarak hasil pemetaan dianggap bersifat linier. Artinya, MDS berusaha mempertahankan proporsi jarak antarrobus sebagaimana tercermin dalam data awal. Jika jarak antara dua objek dalam data asli lebih besar, maka objek tersebut akan ditempatkan lebih jauh dalam ruang konfigurasi MDS.

Multidimensional Scaling non-metrik

Multidimensional Scaling non-metrik merupakan pendekatan yang menggunakan informasi ketidakmiripan berbasis ordinal, yaitu hanya mempertimbangkan urutan (ranking) dari tingkat kemiripan antar objek. Tidak seperti Multidimensional Scaling metrik yang mempertahankan besaran jarak, non-metrik hanya memastikan bahwa urutan jarak antar objek di dalam konfigurasi hasil tetap konsisten dengan urutan pada data asli.

Manfaat Multidimensional Scaling (MDS)

Multidimensional Scaling (MDS) sangat bermanfaat dalam berbagai bidang yang memerlukan visualisasi hubungan antar objek kompleks, manfaat Multidimensional Scaling (MDS) antara lain:

  1. Melakukan pengelompokkan dan pemetaan hubungan yang kompleks antar objek dalam ruang berdimensi rendah, sehingga membuat data yang sulit dipahami menjadi lebih mudah diinterpretasikan dan dianalisis.
  2. Mengidentifikasi pola-pola hubungan yang mungkin tersembunyi dalam data yang besar atau kompleks.
  3. Mendapatkan posisi relatif suatu objek dibandingkan objek lain

Langkah-langkah Multidimensional Scaling (MDS)

Prosedur Multidimensional Scaling (MDS) pada dasarnya bertujuan untuk mengubah informasi ketidakmiripan antar objek menjadi representasi geometris dalam ruang berdimensi rendah. Secara umum, langkah-langkah pelaksanaan MDS meliputi pembentukan matriks jarak, transformasi matriks jarak menjadi matriks Gram, dekomposisi nilai eigen, penentuan konfigurasi titik, dan evaluasi menggunakan nilai stress.

Matriks Jarak

Tahap awal dalam Multidimensional Scaling (MDS) adalah tahapan membentuk matriks jarak (dissimilarity matrix) yang menggambarkan tingkat kemiripan atau ketidakmiripan antar objek. Jarak dapat dihitung menggunakan berbagai ukuran tergantung karakteristik data, dua yang paling umum yaitu:

  1. Jarak Euclidean (Euclidean Distance) \[ d_{ij} =\sqrt{\sum_{k=1}^{p}(x_{ik}-x_{jk})^2} \] Keterangan
Notasi Deskripsi
\(d_{ij}\) jarak antara objek ke-i dan objek ke-j
\(x_{ik}\) nilai objek ke-i pada variabel ke-k
\(x_{jk}\) nilai objek ke-j pada variabel ke-k
\(p\) jumlah variabel yang digunakan
  1. Jarak Manhattan (Manhattan Distance) \[ d_{ij} = \sum_{k=1}^{p} \left|x_{ik}-x_{jk}\right| \]

keterangan:

Notasi Deskripsi
\(d_{ij}\) jarak antara objek ke-i dan objek ke-j
\(x_{ik}\) nilai objek ke-i pada variabel ke-k
\(x_{jk}\) nilai objek ke-j pada variabel ke-k
\(p\) jumlah variabel yang digunakan

Proyeksi Matriks Jarak ke Matriks Gram

Setelah matriks jarak diperoleh, langkah berikutnya adalah mengonversi jarak menjadi matriks Gram (B) melalui proses double-centering. Matriks Gram merupakan representasi inner product dari titik-titik dalam ruang multidimensional. Transformasi dilakukan menggunakan rumus:

\[ B = - \frac{1}{2}JD^2 J \]

Keterangan

Notasi Deskripsi
\(D^2\) matriks jarak kuadrat \(d^2_{ij}\)
\(J\) matriks centering
\(B\) matriks Gram

Matriks Gram yang akan menjadi dasar untuk mendapatkan koordinat objek. Matriks Gram akan didekomposisi untuk mencari koordinat hasil MDS.

Dekomposisi Nilai Eigen

Matriks Gram B kemudian didekomposisi menggunakan dekomposisi nilai eigen

\[ B = U D V^T \]

Keterangan

Notasi Deskripsi
\(U\) matriks eigenvector
\(D\) matriks diagonal yang berisi eigenvalue
\(V^T\) transpose dari matriks eigenvector

Eigenvalue positif digunakan untuk menentukan dimensi ruang solusi, sementara eigenvector terkait digunakan untuk membentu konfigurasi titik.

Konfigurasi Titik

Koordinat hasil Multidimensional Scaling dibentuk dengan menggunakan:

\[ X = U_p D^{\frac{1}{2}}_{p} \]

Keterangan

Notasi Deskripsi
\(U_p\) eigenvector untuk \(p\) eigenvalue terbesar dan positif
\(D^\frac{1}{2}_p\) akar dari eigenvalue positif utama

Hasilnya adalah konfigurasi titik-titik dalam ruang berdimensi rendah yang menggambarkan objek-objek berdasarkan kemiripan atau ketidakmiripannya.

Nilai Stress

Mengevaluasi kualitas pemetaan menggunakan nilai stress, yang menguku sejauh mana jarak dalam konfigurasi Multidimensional Scaling mampu merepresentasikan jarak asli

\[ \text{Stress} = \sqrt{\frac{\sum_{i \ne j} (d_{ij} - \hat{d}_{ij})^{2} }{ \sum_{i \ne j} d_{ij}^{2} } } \]

Keterangan

Notasi Deskripsi
\((d_{ij} - \hat{d}_{ij})^{2}\) jarak asli antara objek ke-i dan ke-j
\(d_{ij}^{2}\) jarak hasil pemetaan *Multidimensional Scaling

Tabel Kriteria Nilai Stress

Nilai Stress Kriteria
\(>20\%\) Buruk
\(10\% - 20\%\) Cukup
\(5.1\% - 10\%\) Baik
\(2.5\%-5\%\%\) Sangat Baik
\(<2.5\%\) Sempurna

Semakin kecil nilai Stress maka hubungan monoton yang terbentuk antara ketidaksamaan dengan disparties semakin baik (didapat kesesuaian) dan kriteria peta persepsi yang terbentuk semakin sempurna

Sumber Data

Data penelitian ini diperoleh dari tiga indikator ekonomi utama yang dikumpulkan berdasarkan 38 provinsi di Indonesia. Data bersifat sekunder dan berasal dari lembaga resmi pemerintah, yaitu Kementerian Ketenagakerjaan (Kemnaker) dan Badan Pusat Statistik (BPS)

dengan variabel sebagai berikut:

  1. X1 = Upah Minimum Regional (UMR).
  2. X2 = Indeks Harga Konsumen (IHK).
  3. X3 = Tingkat Partisipasi Angkatan Kerja (TPAK).
> library(readxl)
> library(DT)
> 
> # Import data
> data <- read_excel("C:/Users/nazal/OneDrive/Dokumen/Statistics/SEMESTER 5/ANALISIS MULTIVARIAT/LAPRAK2_ANMUL.xlsx")
> 
> # Tabel interaktif
> datatable(
+   data,
+   options = list(
+     pageLength = 5,
+     autoWidth = TRUE
+   )
+ )

Tujuan

Analisis ini dilakukan untuk memetakan kondisi ekonomi 38 provinsi di Indonesia berdasarkan tiga indikator utama (UMR, IHK, dan TPAK) agar mendapatkan:

  1. Menggambarkan kemiripan atau ketidakmiripan antar provinsi.
  2. Melihat pola pengelompokkan (clustering) kondisi ekonomi.
  3. Memberikan gambaran visual kondisi ekonomi.
  4. Menjadi dasar analisis lanjutan, untuk menentukan prioritas kebijakan, Analisis perbedaan pembangunan daerah, Identifikasi provinsi yang perlu intervensi ekonomi

Tujuan utama analisis ini adalah mengubah data ekonomi multivariat antar provinsi menjadi representasi visual yang menunjukkan hubungan kedekatan antar provinsi berdasarkan UMR, IHK, dan TPAK, sehingga peneliti dapat memahami pola, kemiripan, dan kelompok ekonomi regional di Indonesia.

SOURCE CODE

Library

> library(readxl)
> library(MASS)
  1. Library MASS (Modern Applied Statistics with S) merupakan sebuah package dalam bahasa pemrograman R yang dikembangkan oleh Venables dan Ripley. Package ini banyak digunakan dalam bidang statistik terapan karena menyediakan berbagai fungsi dan dataset yang mendukung pemodelan serta analisis statistik kompleks. Salah satu fungsi penting dalam MASS adalah cmdscale() yaitu fungsi untuk melakukan Classical Multidimensional Scaling (MDS). Teknik ini digunakan untuk memetakan data jarak atau dissimilaritas ke ruang berdimensei rendah (2 atau 3 dimensi) sehingga pola antar objek dapat divisualisasikan secara lebih mudah

  2. Librart stats merupakan pustaka bawaan (built in) sudah tersedia secara otomatis di dalam isntalasi standar R. Oleh karena itu, library ini tidak memerlukan instalasi tambahan dan langsung dapat digunakan.

  3. Library readxl untuk membaca file Excel ke dalam R

Impor Data

> data <- read_excel("C:/Users/nazal/OneDrive/Dokumen/Statistics/SEMESTER 5/ANALISIS MULTIVARIAT/LAPRAK2_ANMUL.xlsx")

Plot…

> plot(data$UMR, data$TPAK,
+      xlab = "Upah Minimum Regional (UMR)",
+      ylab = "Tingkat Partisipasi Angkatan Kerja (TPAK)",
+      main = "Scatterplot UMR vs TPAK",
+      pch = 19, col = "navy")

> plot(data$UMR, data$IHK,
+      xlab = "Upah Minimum Regional (UMR)",
+      ylab = "Indeks Harga Konsumen (IHK)",
+      main = "Scatterplot UMR vs IHKK",
+      pch = 19, col = "navy")

> plot(data$TPAK, data$IHK,
+      xlab = "Tingkat Partisipasi Angkatan Kerja (TPAK) ",
+      ylab = "Indeks Harga Konsumen (IHK)",
+      main = "Scatterplot TPAK vs ",
+      pch = 19, col = "navy")

SOURCE CODE

> # data yang digunakan
> data = read_excel("C:/Users/nazal/OneDrive/Dokumen/Statistics/SEMESTER 5/ANALISIS MULTIVARIAT/LAPRAK2_ANMUL.xlsx")
> Data = scale(data[,-(1:2)])
> Data
             UMR         IHK         TPAK
 [1,]  0.5478951  0.94832578 -1.028637571
 [2,] -0.4714760  0.69766087 -0.049419040
 [3,] -0.4691314  0.44039951  0.129016336
 [4,]  0.2877765  0.46018884 -1.235361482
 [5,] -0.1156110  0.09738436 -0.706583476
 [6,]  0.5419452  0.24250615  0.044150730
 [7,] -0.9459353 -0.61503171  0.248698601
 [8,] -0.6178750  0.92194000  0.174713201
 [9,]  0.8288169 -1.91453140 -0.584725170
[10,]  0.4567541  1.02088668 -0.765336588
[11,]  3.0648490 -1.42639446 -1.078686518
[12,] -1.6502211  0.22271682 -0.314896064
[13,] -1.6824092  0.20952393  0.612097478
[14,] -1.5430677 -0.01475521  0.733955784
[15,] -1.4814289  0.17654170  0.847109925
[16,] -0.6001519 -0.50948859 -0.987292788
[17,] -0.4656483  1.04727246  1.532562896
[18,] -1.0446457  0.12377014  1.336719190
[19,] -1.4476213 -0.10050899  1.186572349
[20,] -0.6396211 -0.45671703 -0.591253294
[21,]  0.2360679 -0.13349122 -0.099467988
[22,]  0.2692724  0.04461280  0.011510113
[23,]  0.3915321 -0.26542012 -0.861082400
[24,]  0.3927780 -1.30106201 -0.253966911
[25,]  0.6799968 -0.10710544 -1.100446929
[26,] -0.5856178 -0.23903434  0.033270524
[27,]  0.5065785 -0.52927793 -0.950300088
[28,] -0.3524023 -0.82611796 -0.127756523
[29,] -0.1344417 -0.93166108 -0.617365788
[30,] -0.3069818 -0.41713836  0.316155877
[31,] -0.2521607  0.24910260 -0.608661623
[32,]  0.1395447  0.17654170 -0.297487735
[33,]  0.4440248 -0.52268148  0.237818395
[34,]  1.4307871 -1.54513048 -0.482451235
[35,]  1.4307901 -1.18232599  0.004981989
[36,]  1.4307901  0.54594263 -0.480275194
[37,]  1.2836953  1.58818096  1.874201361
[38,]  0.4425538  3.82437586  3.897919656
attr(,"scaled:center")
         UMR          IHK         TPAK 
3.313131e+06 1.062624e+02 7.035711e+01 
attr(,"scaled:scale")
         UMR          IHK         TPAK 
6.798476e+05 1.515968e+00 4.595501e+00 
> # menghitung jarak
> D = as.matrix(dist(Data))
> 
> # menghitung eigen
> A = D^2
> I = diag(38)
> J = matrix(rep(1,38), nrow = 38, ncol = 38)
> V = I - (1/38) * J
> 
> aa = V %*% A
> BB = aa %*% V
> B = (-1/2) * BB
> eigen_result = eigen(B)
> eigenvalues = eigen_result$values
> eigenvectors = eigen_result$vectors
> 
> # menghitung tingkat kumulatif keragaman
> cumulative_variance = cumsum(eigenvalues) / sum(eigenvalues)
> 
> # titik koordinat objek
> fit = cmdscale(D, k = 2)
> 
> # visualisasi
> plot(fit,
+      xlab = "Dimensi 1",
+      ylab = "Dimensi 2",
+      pch = 16, cex = 0.5)
> text(fit[,1], fit[,2], labels = 1:nrow(data), pos = 3, cex = 0.5)

> 
> 
> # hitung disparities
> disparties = matrix(0, nrow = 38, ncol = 38)
> 
> for (i in 1:38){
+   for(j in 1:38){
+     disparties[i,j] = sqrt(sum((fit[i,] - fit[j,])^2))
+   }
+ }
> 
> # hitung stress
> stress = sqrt(sum(D - disparties)^2) / sum(D^2)
> stress
[1] 0.0383311
> cat("Nilai Stress:", stress, "\n")
Nilai Stress: 0.0383311 

HASIL DAN PEMBAHASAN

Statistika Deskriptif

  1. Ringkasan data untuk Upah Minimum Regional (UMR)
> summary(data$UMR)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
2169349 2907589 3321266 3313131 3649059 5396761 
> sd(data$UMR)
[1] 679847.6
  1. Ringkasan data untuk Tingkat Partisipasi Angkatan Kerja (TPAK)
> summary(data$TPAK)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  64.68   67.53   69.83   70.36   71.49   88.27 
> sd(data$TPAK)
[1] 4.595501
  1. Ringkasan data untuk Indeks Harga Konsumen (IHK)
> summary(data$IHK)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  103.4   105.5   106.3   106.3   106.9   112.1 
> sd(data$IHK)
[1] 1.515968

Nilai Eigen dan Kumulatif Keragaman

> eigenvalues
 [1]  6.429738e+01  3.274385e+01  1.395877e+01  1.271473e-14  3.447292e-15
 [6]  2.576202e-15  2.333653e-15  1.735849e-15  1.616564e-15  1.552099e-15
[11]  1.473136e-15  1.284443e-15  1.222020e-15  1.076424e-15  8.819649e-16
[16]  6.742262e-16  5.205933e-16  4.770427e-16  4.391783e-16  2.672922e-16
[21]  1.465130e-16 -2.452279e-16 -5.563878e-16 -7.557777e-16 -7.588798e-16
[26] -8.119285e-16 -8.863997e-16 -1.054807e-15 -1.221472e-15 -1.398448e-15
[31] -1.591274e-15 -2.429313e-15 -2.429552e-15 -3.092540e-15 -3.224134e-15
[36] -4.673509e-15 -5.461930e-15 -6.419542e-15
> cumulative_variance
 [1] 0.5792557 0.8742454 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
 [8] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[15] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[22] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[29] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[36] 1.0000000 1.0000000 1.0000000

Berdasarkan Nilai eigen yang didapatkan dapat dihitung Kumulatif keragaman data yang dapat dijelaskan. Nilai pertama yaitu 0.5792 artinya dimensi pertama sudah menjelaskan sekitar \(57.9\%\) keragaman total, selanjutnya nilai kedua 0.8474 setelah menambah dimensi kedua total keragaman yang bisa dijelaskan menjadi \(84.74\%\) dan dimensi ketiga 1 atau \(100\%\). Karena total \(>80\%\) total keragaman sudah dianggap baik, maka visualisasi akan menggunakan 2 dimensi.

Titik Koordinat Pada Dimensi 2

> fit
          [,1]        [,2]
1   0.28935841 -0.66458309
2  -0.59254656  0.18781348
3  -0.54635998  0.24750631
4   0.64055422 -0.21351052
5   0.36574001  0.19445183
6   0.02174539 -0.59170284
7  -0.13296665  1.04508908
8  -0.94140627  0.20138834
9   1.93026880  0.03661477
10  0.03237667 -0.65355192
11  2.79930629 -2.10072952
12 -0.56022463  1.48547640
13 -1.18329834  1.35723843
14 -1.06825607  1.28947989
15 -1.24269826  1.14397166
16  0.75685094  0.90694353
17 -1.87067704 -0.22135420
18 -1.36976092  0.67734773
19 -1.27945192  1.15379584
20  0.44351925  0.85456177
21  0.24166421 -0.15038486
22  0.06628736 -0.26470289
23  0.89397818 -0.11147577
24  1.15107551  0.15581860
25  1.06246099 -0.39093159
26 -0.09230927  0.61686111
27  1.16608331 -0.10566746
28  0.47942056  0.64405553
29  0.95694673  0.56851735
30 -0.06133765  0.37663075
31  0.15133710  0.24739457
32  0.13896798 -0.13951857
33  0.34435874 -0.25903633
34  1.85489873 -0.66616256
35  1.29730318 -0.88291965
36  0.51640794 -1.42341017
37 -1.77884908 -2.07866564
38 -4.88076785 -2.47264940

Setiap objek mendapatkan dua nilai koordinat, satu untuk dimensi 1 dan satu untuk dimensi 2. Koordinat ini adalah representasi posisi objek berdasarkan pola kemiripan atau ketidakmiripannya. Objek yang punya nilai koordinat mirip atau berdekatan berarti jaraknya juga dekat pada data asli, sedangkan objek yang posisi koordinatnya jauh menunjukkan bahwa hubungan antar objek tersebut memang jauh dalam matriks jarak awal.

Koordinat Posisi Pada Plot 2 Dimensi

> plot(fit,
+      xlab = "Dimensi 1",
+      ylab = "Dimensi 2",
+      pch = 16, cex = 0.5)
> text(fit[,1], fit[,2], labels = 1:nrow(data), pos = 3, cex = 0.5)

Visualisasi masing-masing provinsi sesuai dengan urutan ke-1 sampai ke-38 pada plot terlihat bahwa provinsi ke-38 terlihat sangat jauh dari titik lain artinya terdapat ketidakmiripan antara provinsi ke-38 dengan provinsi-provinsi lain berdasarkan variabel UMR, TPAK, dan IHK.

Disparties

> disparties
           [,1]       [,2]       [,3]      [,4]      [,5]       [,6]      [,7]
 [1,] 0.0000000 1.22651388 1.23706600 0.5716686 0.8624240 0.27735944 1.7610614
 [2,] 1.2265139 0.00000000 0.07547472 1.2967646 0.9583096 0.99247181 0.9726948
 [3,] 1.2370660 0.07547472 0.00000000 1.2733035 0.9136417 1.01341783 0.8983498
 [4,] 0.5716686 1.29676462 1.27330351 0.0000000 0.4918904 0.72522672 1.4772974
 [5,] 0.8624240 0.95830956 0.91364170 0.4918904 0.0000000 0.85812088 0.9860487
 [6,] 0.2773594 0.99247181 1.01341783 0.7252267 0.8581209 0.00000000 1.6440875
 [7,] 1.7610614 0.97269479 0.89834978 1.4772974 0.9860487 1.64408747 0.0000000
 [8,] 1.5048881 0.34912373 0.39772911 1.6354633 1.3071647 1.24765971 1.1685057
 [9,] 1.7844510 2.52734216 2.48559155 1.3137452 1.5724703 2.00928958 2.2965106
[10,] 0.2572184 1.04805762 1.07090711 0.7506773 0.9111759 0.06275614 1.7066692
[11,] 2.8917737 4.09171049 4.08750464 2.8673692 3.3451610 3.16101345 4.3005115
[12,] 2.3118277 1.29806539 1.23804773 2.0804871 1.5887589 2.15716543 0.6135881
[13,] 2.5012957 1.31016884 1.27952955 2.4070086 1.9369028 2.29139749 1.0957344
[14,] 2.3793863 1.19998684 1.16536882 2.2757444 1.8042814 2.17415539 0.9666919
[15,] 2.3702464 1.15625935 1.13513749 2.3215076 1.8677959 2.14741326 1.1141284
[16,] 1.6395869 1.52905907 1.46055337 1.1264733 0.8127805 1.66922770 0.9004774
[17,] 2.2050408 1.34202672 1.40486507 2.5112435 2.2747430 1.92832071 2.1502363
[18,] 2.1338827 0.91853467 0.92884485 2.1988623 1.8014305 1.88328945 1.2903076
[19,] 2.4015969 1.18531047 1.16566913 2.3571063 1.9044678 2.17712657 1.1516274
[20,] 1.5269469 1.23206560 1.16119646 1.0860945 0.6646764 1.50651071 0.6071545
[21,] 0.5164054 0.90015872 0.88277941 0.4038540 0.3664794 0.49307793 1.2527994
[22,] 0.4578918 0.79927042 0.79855809 0.5765441 0.5481742 0.33001962 1.3248612
[23,] 0.8194466 1.51635414 1.48439959 0.2731937 0.6104320 0.99569477 1.5466926
[24,] 1.1897963 1.74391559 1.69990996 0.6301079 0.7862852 1.35431711 1.5619111
[25,] 0.8201053 1.75328145 1.73086910 0.4576937 0.9099966 1.05990473 1.8684760
[26,] 1.3370750 0.65902899 0.58530762 1.1075224 0.6230881 1.21393380 0.4301537
[27,] 1.0397275 1.78294983 1.74848327 0.5364802 0.8547637 1.24327779 1.7354456
[28,] 1.3223686 1.16501945 1.09976225 0.8725730 0.4637529 1.31778804 0.7320150
[29,] 1.4022164 1.59557666 1.53719847 0.8436064 0.6996073 1.49020550 1.1895511
[30,] 1.0986874 0.56376845 0.50191610 0.9170163 0.4643108 0.97189132 0.6722851
[31,] 0.9223628 0.74626591 0.69769709 0.6721361 0.2208428 0.84904562 0.8468442
[32,] 0.5461777 0.80141112 0.78705950 0.5070144 0.4036852 0.46713140 1.2154192
[33,] 0.4092593 1.03801074 1.02467813 0.2996738 0.4539919 0.46340735 1.3887342
[34,] 1.5655411 2.59215422 2.56920886 1.2959655 1.7199566 1.83466493 2.6229737
[35,] 1.0313212 2.17209610 2.16262726 0.9377781 1.4242680 1.30837873 2.4006019
[36,] 0.7920669 1.95597079 1.98026198 1.2162522 1.6248625 0.96769216 2.5524843
[37,] 2.5054165 2.55817147 2.63250932 3.0548839 3.1251121 2.33520852 3.5308317
[38,] 5.4771625 5.04647448 5.11725891 5.9656270 5.8855139 5.25096145 5.9089847
           [,8]      [,9]      [,10]    [,11]     [,12]     [,13]     [,14]
 [1,] 1.5048881 1.7844510 0.25721839 2.891774 2.3118277 2.5012957 2.3793863
 [2,] 0.3491237 2.5273422 1.04805762 4.091710 1.2980654 1.3101688 1.1999868
 [3,] 0.3977291 2.4855915 1.07090711 4.087505 1.2380477 1.2795295 1.1653688
 [4,] 1.6354633 1.3137452 0.75067727 2.867369 2.0804871 2.4070086 2.2757444
 [5,] 1.3071647 1.5724703 0.91117587 3.345161 1.5887589 1.9369028 1.8042814
 [6,] 1.2476597 2.0092896 0.06275614 3.161013 2.1571654 2.2913975 2.1741554
 [7,] 1.1685057 2.2965106 1.70666918 4.300512 0.6135881 1.0957344 0.9666919
 [8,] 0.0000000 2.8763985 1.29583026 4.392343 1.3394706 1.1808900 1.0954607
 [9,] 2.8763985 0.0000000 2.01948622 2.307264 2.8812771 3.3820626 3.2497419
[10,] 1.2958303 2.0194862 0.00000000 3.122535 2.2195987 2.3497114 2.2331066
[11,] 4.3923430 2.3072639 3.12253462 0.000000 4.9139924 5.2743418 5.1431079
[12,] 1.3394706 2.8812771 2.21959872 4.913992 0.0000000 0.6361335 0.5445278
[13,] 1.1808900 3.3820626 2.34971138 5.274342 0.6361335 0.0000000 0.1335138
[14,] 1.0954607 3.2497419 2.23310659 5.143108 0.5445278 0.1335138 0.0000000
[15,] 0.9895656 3.3606486 2.20383917 5.183231 0.7631486 0.2213844 0.2271623
[16,] 1.8389904 1.4609523 1.72046768 3.635618 1.4385369 1.9917190 1.8647653
[17,] 1.0209091 3.8096899 1.95151436 5.033964 2.1518727 1.7217561 1.7107013
[18,] 0.6403320 3.3616566 1.93320555 5.009874 1.1438623 0.7049962 0.6823569
[19,] 1.0106211 3.3985880 2.23324880 5.218065 0.7920227 0.2250209 0.2510256
[20,] 1.5312264 1.6968976 1.56315231 3.779349 1.1855611 1.7027094 1.5730920
[21,] 1.2342610 1.6989274 0.54495722 3.216423 1.8218309 2.0744749 1.9465615
[22,] 1.1102646 1.8881788 0.39032487 3.292474 1.8589365 2.0474760 1.9242331
[23,] 1.8618593 1.0468185 1.01794092 2.754525 2.1598523 2.5440517 2.4110247
[24,] 2.0929779 0.7882587 1.38078519 2.794400 2.1671497 2.6253973 2.4921117
[25,] 2.0895758 0.9674122 1.06303487 2.437220 2.4807288 2.8459679 2.7136208
[26,] 0.9452954 2.1041644 1.27651708 3.968216 0.9866293 1.3184899 1.1852798
[27,] 2.1297407 0.7773183 1.25915374 2.578311 2.3477389 2.7676141 2.6341429
[28,] 1.4881879 1.5728779 1.37245523 3.593844 1.3374794 1.8092164 1.6768648
[29,] 1.9335273 1.1091782 1.53241088 3.243327 1.7727444 2.2809493 2.1497054
[30,] 0.8973465 2.0204225 1.03443643 3.784257 1.2159058 1.4900964 1.3591094
[31,] 1.0937114 1.7913755 0.90876629 3.539128 1.4279940 1.7358010 1.6041662
[32,] 1.1328839 1.7999393 0.52496856 3.305109 1.7690333 1.9971654 1.8706754
[33,] 1.3657169 1.6132329 0.50296656 3.068974 1.9650943 2.2239785 2.0960399
[34,] 2.9277920 0.7068073 1.82256569 1.717524 3.2345589 3.6503141 3.5170117
[35,] 2.4874774 1.1163284 1.28555382 1.933669 3.0099351 3.3424081 3.2117270
[36,] 2.1829321 2.0324063 0.90937780 2.381257 3.1017348 3.2589888 3.1418040
[37,] 2.4289826 4.2698907 2.30466653 4.578209 3.7667166 3.4871360 3.4422880
[38,] 4.7612023 7.2585554 5.23909389 7.689074 5.8595097 5.3234689 5.3561986
          [,15]     [,16]    [,17]     [,18]     [,19]     [,20]     [,21]
 [1,] 2.3702464 1.6395869 2.205041 2.1338827 2.4015969 1.5269469 0.5164054
 [2,] 1.1562594 1.5290591 1.342027 0.9185347 1.1853105 1.2320656 0.9001587
 [3,] 1.1351375 1.4605534 1.404865 0.9288449 1.1656691 1.1611965 0.8827794
 [4,] 2.3215076 1.1264733 2.511244 2.1988623 2.3571063 1.0860945 0.4038540
 [5,] 1.8677959 0.8127805 2.274743 1.8014305 1.9044678 0.6646764 0.3664794
 [6,] 2.1474133 1.6692277 1.928321 1.8832894 2.1771266 1.5065107 0.4930779
 [7,] 1.1141284 0.9004774 2.150236 1.2903076 1.1516274 0.6071545 1.2527994
 [8,] 0.9895656 1.8389904 1.020909 0.6403320 1.0106211 1.5312264 1.2342610
 [9,] 3.3606486 1.4609523 3.809690 3.3616566 3.3985880 1.6968976 1.6989274
[10,] 2.2038392 1.7204677 1.951514 1.9332056 2.2332488 1.5631523 0.5449572
[11,] 5.1832313 3.6356184 5.033964 5.0098737 5.2180651 3.7793490 3.2164231
[12,] 0.7631486 1.4385369 2.151873 1.1438623 0.7920227 1.1855611 1.8218309
[13,] 0.2213844 1.9917190 1.721756 0.7049962 0.2250209 1.7027094 2.0744749
[14,] 0.2271623 1.8647653 1.710701 0.6823569 0.2510256 1.5730920 1.9465615
[15,] 0.0000000 2.0135489 1.502821 0.4836143 0.0380440 1.7108733 1.9694392
[16,] 2.0135489 0.0000000 2.859538 2.1389699 2.0512107 0.3176800 1.1761635
[17,] 1.5028214 2.8595383 0.000000 1.0288742 1.4968583 2.5520775 2.1135331
[18,] 0.4836143 2.1389699 1.028874 0.0000000 0.4849315 1.8219193 1.8115828
[19,] 0.0380440 2.0512107 1.496858 0.4849315 0.0000000 1.7487626 2.0036670
[20,] 1.7108733 0.3176800 2.552078 1.8219193 1.7487626 0.0000000 1.0250186
[21,] 1.9694392 1.1761635 2.113533 1.8115828 2.0036670 1.0250186 0.0000000
[22,] 1.9229684 1.3600123 1.937449 1.7174673 1.9552884 1.1811254 0.2093458
[23,] 2.4782120 1.0276097 2.766838 2.3972395 2.5148977 1.0658995 0.6534734
[24,] 2.5897103 0.8482934 3.045201 2.5742201 2.6274364 0.9944234 0.9595778
[25,] 2.7694200 1.3333707 2.938036 2.6564872 2.8054837 1.3908065 0.8553187
[26,] 1.2654013 0.8973410 1.966010 1.2788829 1.3029223 0.5861858 0.8367823
[27,] 2.7136372 1.0921777 3.038963 2.6539817 2.7507981 1.2017234 0.9255000
[28,] 1.7932120 0.3822011 2.504375 1.8494812 1.8312476 0.2135457 0.8292549
[29,] 2.2736723 0.3931547 2.935874 2.3292515 2.3117158 0.5877322 1.0141250
[30,] 1.4086962 0.9750201 1.905596 1.3425357 1.4449180 0.6951968 0.6079108
[31,] 1.6574634 0.8953501 2.075636 1.5806957 1.6937298 0.6738119 0.4079062
[32,] 1.8858284 1.2152622 2.011311 1.7156729 1.9195252 1.0396861 0.1032695
[33,] 2.1182968 1.2367938 2.215356 1.9532080 2.1524070 1.1180043 0.1495035
[34,] 3.5877142 1.9184295 3.752035 3.4933436 3.6244176 2.0747517 1.6936801
[35,] 3.2495993 1.8696788 3.236320 3.0899296 3.2844903 1.9359206 1.2849050
[36,] 3.1122185 2.3427252 2.672660 2.8232635 3.1411946 2.2791378 1.3023354
[37,] 3.2669326 3.9170954 1.859580 2.7862094 3.2708110 3.6800467 2.7929806
[38,] 5.1298634 6.5730050 3.758853 4.7169536 5.1108298 6.2784048 5.6242531
          [,22]     [,23]     [,24]     [,25]     [,26]     [,27]     [,28]
 [1,] 0.4578918 0.8194466 1.1897963 0.8201053 1.3370750 1.0397275 1.3223686
 [2,] 0.7992704 1.5163541 1.7439156 1.7532814 0.6590290 1.7829498 1.1650194
 [3,] 0.7985581 1.4843996 1.6999100 1.7308691 0.5853076 1.7484833 1.0997622
 [4,] 0.5765441 0.2731937 0.6301079 0.4576937 1.1075224 0.5364802 0.8725730
 [5,] 0.5481742 0.6104320 0.7862852 0.9099966 0.6230881 0.8547637 0.4637529
 [6,] 0.3300196 0.9956948 1.3543171 1.0599047 1.2139338 1.2432778 1.3177880
 [7,] 1.3248612 1.5466926 1.5619111 1.8684760 0.4301537 1.7354456 0.7320150
 [8,] 1.1102646 1.8618593 2.0929779 2.0895758 0.9452954 2.1297407 1.4881879
 [9,] 1.8881788 1.0468185 0.7882587 0.9674122 2.1041644 0.7773183 1.5728779
[10,] 0.3903249 1.0179409 1.3807852 1.0630349 1.2765171 1.2591537 1.3724552
[11,] 3.2924742 2.7545246 2.7944005 2.4372198 3.9682161 2.5783114 3.5938440
[12,] 1.8589365 2.1598523 2.1671497 2.4807288 0.9866293 2.3477389 1.3374794
[13,] 2.0474760 2.5440517 2.6253973 2.8459679 1.3184899 2.7676141 1.8092164
[14,] 1.9242331 2.4110247 2.4921117 2.7136208 1.1852798 2.6341429 1.6768648
[15,] 1.9229684 2.4782120 2.5897103 2.7694200 1.2654013 2.7136372 1.7932120
[16,] 1.3600123 1.0276097 0.8482934 1.3333707 0.8973410 1.0921777 0.3822011
[17,] 1.9374494 2.7668379 3.0452008 2.9380359 1.9660104 3.0389631 2.5043747
[18,] 1.7174673 2.3972395 2.5742201 2.6564872 1.2788829 2.6539817 1.8494812
[19,] 1.9552884 2.5148977 2.6274364 2.8054837 1.3029223 2.7507981 1.8312476
[20,] 1.1811254 1.0658995 0.9944234 1.3908065 0.5861858 1.2017234 0.2135457
[21,] 0.2093458 0.6534734 0.9595778 0.8553187 0.8367823 0.9255000 0.8292549
[22,] 0.0000000 0.8417545 1.1634447 1.0041392 0.8957165 1.1112351 0.9982589
[23,] 0.8417545 0.0000000 0.3708710 0.3263158 1.2260659 0.2721671 0.8617921
[24,] 1.1634447 0.3708710 0.0000000 0.5538847 1.3261093 0.2619164 0.8303588
[25,] 1.0041392 0.3263158 0.5538847 0.0000000 1.5326906 0.3035016 1.1879118
[26,] 0.8957165 1.2260659 1.3261093 1.5326906 0.0000000 1.4510684 0.5723762
[27,] 1.1112351 0.2721671 0.2619164 0.3035016 1.4510684 0.0000000 1.0166564
[28,] 0.9982589 0.8617921 0.8303588 1.1879118 0.5723762 1.0166564 0.0000000
[29,] 1.2196434 0.6829024 0.4560770 0.9652334 1.0503691 0.7058777 0.4834638
[30,] 0.6539090 1.0727890 1.2323570 1.3609098 0.2422186 1.3187774 0.6032706
[31,] 0.5191120 0.8248052 1.0039238 1.1124779 0.4425710 1.0744127 0.5147608
[32,] 0.1447535 0.7555308 1.0543177 0.9571039 0.7909484 1.0276730 0.8543397
[33,] 0.2781291 0.5690832 0.9071365 0.7301145 0.9787110 0.8359146 0.9131356
[34,] 1.8331122 1.1095250 1.0821368 0.8388740 2.3319024 0.8880436 1.8996346
[35,] 1.3775311 0.8705152 1.0489803 0.5451634 2.0445941 0.7882510 1.7322197
[36,] 1.2430652 1.3651854 1.7019890 1.1679837 2.1291415 1.4691916 2.0677965
[37,] 2.5874677 3.3187108 3.6847494 3.3047676 3.1796668 3.5447635 3.5373708
[38,] 5.4174148 6.2388166 6.5796640 6.2972627 5.6986324 6.4936132 6.2004411
          [,29]     [,30]     [,31]     [,32]     [,33]     [,34]     [,35]
 [1,] 1.4022164 1.0986874 0.9223628 0.5461777 0.4092593 1.5655411 1.0313212
 [2,] 1.5955767 0.5637684 0.7462659 0.8014111 1.0380107 2.5921542 2.1720961
 [3,] 1.5371985 0.5019161 0.6976971 0.7870595 1.0246781 2.5692089 2.1626273
 [4,] 0.8436064 0.9170163 0.6721361 0.5070144 0.2996738 1.2959655 0.9377781
 [5,] 0.6996073 0.4643108 0.2208428 0.4036852 0.4539919 1.7199566 1.4242680
 [6,] 1.4902055 0.9718913 0.8490456 0.4671314 0.4634074 1.8346649 1.3083787
 [7,] 1.1895511 0.6722851 0.8468442 1.2154192 1.3887342 2.6229737 2.4006019
 [8,] 1.9335273 0.8973465 1.0937114 1.1328839 1.3657169 2.9277920 2.4874774
 [9,] 1.1091782 2.0204225 1.7913755 1.7999393 1.6132329 0.7068073 1.1163284
[10,] 1.5324109 1.0344364 0.9087663 0.5249686 0.5029666 1.8225657 1.2855538
[11,] 3.2433266 3.7842566 3.5391281 3.3051094 3.0689740 1.7175238 1.9336686
[12,] 1.7727444 1.2159058 1.4279940 1.7690333 1.9650943 3.2345589 3.0099351
[13,] 2.2809493 1.4900964 1.7358010 1.9971654 2.2239785 3.6503141 3.3424081
[14,] 2.1497054 1.3591094 1.6041662 1.8706754 2.0960399 3.5170117 3.2117270
[15,] 2.2736723 1.4086962 1.6574634 1.8858284 2.1182968 3.5877142 3.2495993
[16,] 0.3931547 0.9750201 0.8953501 1.2152622 1.2367938 1.9184295 1.8696788
[17,] 2.9358735 1.9055957 2.0756364 2.0113106 2.2153563 3.7520354 3.2363201
[18,] 2.3292515 1.3425357 1.5806957 1.7156729 1.9532080 3.4933436 3.0899296
[19,] 2.3117158 1.4449180 1.6937298 1.9195252 2.1524070 3.6244176 3.2844903
[20,] 0.5877322 0.6951968 0.6738119 1.0396861 1.1180043 2.0747517 1.9359206
[21,] 1.0141250 0.6079108 0.4079062 0.1032695 0.1495035 1.6936801 1.2849050
[22,] 1.2196434 0.6539090 0.5191120 0.1447535 0.2781291 1.8331122 1.3775311
[23,] 0.6829024 1.0727890 0.8248052 0.7555308 0.5690832 1.1095250 0.8705152
[24,] 0.4560770 1.2323570 1.0039238 1.0543177 0.9071365 1.0821368 1.0489803
[25,] 0.9652334 1.3609098 1.1124779 0.9571039 0.7301145 0.8388740 0.5451634
[26,] 1.0503691 0.2422186 0.4425710 0.7909484 0.9787110 2.3319024 2.0445941
[27,] 0.7058777 1.3187774 1.0744127 1.0276730 0.8359146 0.8880436 0.7882510
[28,] 0.4834638 0.6032706 0.5147608 0.8543397 0.9131356 1.8996346 1.7322197
[29,] 0.0000000 1.0362063 0.8672524 1.0818522 1.0296160 1.5266802 1.4908091
[30,] 1.0362063 0.0000000 0.2488625 0.5536537 0.7540970 2.1816003 1.8526662
[31,] 0.8672524 0.2488625 0.0000000 0.3871108 0.5419683 1.9330569 1.6096113
[32,] 1.0818522 0.5536537 0.3871108 0.0000000 0.2376339 1.7949296 1.3763668
[33,] 1.0296160 0.7540970 0.5419683 0.2376339 0.0000000 1.5644433 1.1390055
[34,] 1.5266802 2.1816003 1.9330569 1.7949296 1.5644433 0.0000000 0.5982445
[35,] 1.4908091 1.8526662 1.6096113 1.3763668 1.1390055 0.5982445 0.0000000
[36,] 2.0400612 1.8904860 1.7102237 1.3382222 1.1770163 1.5378497 0.9496986
[37,] 3.8068565 2.9963855 3.0226106 2.7273272 2.7962586 3.8986264 3.3003820
[38,] 6.5823709 5.5986878 5.7202028 5.5354537 5.6746833 6.9737077 6.3793262
          [,36]    [,37]    [,38]
 [1,] 0.7920669 2.505416 5.477163
 [2,] 1.9559708 2.558171 5.046474
 [3,] 1.9802620 2.632509 5.117259
 [4,] 1.2162522 3.054884 5.965627
 [5,] 1.6248625 3.125112 5.885514
 [6,] 0.9676922 2.335209 5.250961
 [7,] 2.5524843 3.530832 5.908985
 [8,] 2.1829321 2.428983 4.761202
 [9,] 2.0324063 4.269891 7.258555
[10,] 0.9093778 2.304667 5.239094
[11,] 2.3812573 4.578209 7.689074
[12,] 3.1017348 3.766717 5.859510
[13,] 3.2589888 3.487136 5.323469
[14,] 3.1418040 3.442288 5.356199
[15,] 3.1122185 3.266933 5.129863
[16,] 2.3427252 3.917095 6.573005
[17,] 2.6726603 1.859580 3.758853
[18,] 2.8232635 2.786209 4.716954
[19,] 3.1411946 3.270811 5.110830
[20,] 2.2791378 3.680047 6.278405
[21,] 1.3023354 2.792981 5.624253
[22,] 1.2430652 2.587468 5.417415
[23,] 1.3651854 3.318711 6.238817
[24,] 1.7019890 3.684749 6.579664
[25,] 1.1679837 3.304768 6.297263
[26,] 2.1291415 3.179667 5.698632
[27,] 1.4691916 3.544764 6.493613
[28,] 2.0677965 3.537371 6.200441
[29,] 2.0400612 3.806857 6.582371
[30,] 1.8904860 2.996385 5.598688
[31,] 1.7102237 3.022611 5.720203
[32,] 1.3382222 2.727327 5.535454
[33,] 1.1770163 2.796259 5.674683
[34,] 1.5378497 3.898626 6.973708
[35,] 0.9496986 3.300382 6.379326
[36,] 0.0000000 2.386957 5.498219
[37,] 2.3869572 0.000000 3.126839
[38,] 5.4982188 3.126839 0.000000

Matriks disparties adalah matriks berdimensi \(38 \times 38\) untuk menghitung jarak baru antar titik hasil Multidimensional Scaling (MDS)

Nilai Stress

> cat("Nilai Stress:", stress, "\n")
Nilai Stress: 0.0383311 

Nilai stress sebesar 0.0383311 atau \(3.833\%\) menunjukkan bahwa konfigurasi dua dimensi berhasil merepresentasikan data dengan sangat baik. Distorsi antara jarak asli dan jarak hasil Multidimensional Scaling rendah, sehingga interpretasi posisi relatif antar objek pada peta persepsi dapat dianggap akurat.

KESIMPULAN

Berdasarkan hasil analisis Multidimensional Scaling (MDS) yang telah dilakukan, dapat disimpulkan bahwa pemodelan dua dimensi mampu merepresentasikan hubungan kedekatan antar objek secara baik. Hal ini ditunjukkan oleh nilai stress sebesar 0.03833, yang berada pada kategori sangat baik. Dengan demikian, konfigurasi dua dimensi yang dihasilkan dianggap akurat untuk menggambarkan pola kemiripan maupun perbedaan antar objek dalam dataset.

Visualisasi Multidimensional Scaling (MDS) yang dihasilkan memberikan gambaran yang jelas mengenai posisi relatif antar objek. Objek yang berada berdekatan pada plot menunjukkan karakteristik yang mirip, sementara objek yang terpaut jauh menggambarkan perbedaan yang lebih besar. Pola ini dapat dimanfaatkan untuk mengidentifikasi potensi pengelompokkan alami (natural grouping) atau memahami struktur hubungan dalam data secara lebih intuitif.

Secara keseluruhan, analisis Multidimensional Scaling memberikan representasi yang informatif dan reliabel terhadap data, serta dapat digunakan sebagai dasar untuk interpretasi lebih lanjut maupun pengambilan keputusan pada tahap analisis berikutnya.

DAFTAR PUSTAKA

Rankin, J. H. (1983). Multidimensional Scaling: A Review of Literature. In Psychological Bulletin, 94(3), 491-501.

Chatfield, C., & Collins, A. J. (1984). Introduction to Multidimensional Scaling. London: Heinemann Educational Books.

LS0tDQp0aXRsZTogIlBFTUVUQUFOIEVLT05PTUkgV0lMQVlBSCBJTkRPTkVTSUEgTUVOR0dVTkFLQU4gTVVMVElESU1FTlNJT05BTCBTQ0FMSU5HOiBVTVIsIFRQQUssIERBTiBJSEsiDQphdXRob3I6ICJOYXphbGEgUmFjaG1pIE1hcmV6Y2EgUHJhYm93byINCmRhdGU6ICIyMDI1LTExLTI4Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRoZW1lOg0KICAgICAgdmVyc2lvbjogNQ0KICAgICAgYm9vdHN3YXRjaDogbGl0ZXJhDQogICAgICBiZzogIiNGRkZERUMiICMgYmFja2dyb3VuZA0KICAgICAgZmc6ICIjMUEyQTRGIiAjIGh1cnVmDQogICAgICBwcmltYXJ5OiAiIzFBMkE0RiIgIyB5ZyBiZXJnZXJhaw0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogdHJ1ZQ0KICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KcCB7DQogIHRleHQtYWxpZ246IGp1c3RpZnk7DQogIHRleHQtanVzdGlmeTogaW50ZXItd29yZDsNCn0NCmJvZHkgew0KICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBtb25vc3BhY2U7DQogIGNvbG9yOiAjMUEyQTRGOw0KICBsaW5lLWhlaWdodDogMS42Ow0KICBtYXJnaW4tYm90dG9tOiAxZW0NCn0NCjwvc3R5bGU+DQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpvcHRzX2NodW5rJHNldChtZXNzYWdlID0gRkFMU0UpDQpvcHRzX2NodW5rJHNldCh3YXJuaW5nID0gRkFMU0UpDQpvcHRzX2NodW5rJHNldChjb21tZW50ID0gIiIpDQpvcHRzX2NodW5rJHNldChjb2xsYXBzZSA9IFRSVUUpDQpvcHRzX2NodW5rJHNldChlcnJvciA9IFRSVUUpDQpvcHRzX2NodW5rJHNldChwcm9tcHQgPSBUUlVFKQ0Kb3B0c19jaHVuayRzZXQoZmlnLmFsaWduID0gJ2NlbnRlcicpDQpgYGANCg0KTGlicmFyeToNCmBgYHtyfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpDQojIGluc3RhbGwucGFja2FnZXMoInJtYXJrZG93biIpDQojIGluc3RhbGwucGFja2FnZXMoInByZXR0eWRvYyIpDQojIGluc3RhbGwucGFja2FnZXMoImVxdWF0aW9tYXRpYyIpDQojIGxpYnJhcnkoa25pdHIpDQojIGxpYnJhcnkocm1hcmtkb3duKQ0KIyBsaWJyYXJ5KHByZXR0eWRvYykNCiMgbGlicmFyeShlcXVhdGlvbWF0aWMpDQpgYGANCg0KIyBQRU5EQUhVTFVBTg0KDQojIyBMYXRhciBCZWxha2FuZw0KDQogIEFuYWxpc2lzIG11bHRpdmFyaWF0IG1lcnVwYWthbiBtZXRvZGUgc3RhdGlzdGlrIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmdhbmFsaXNpcyBkYXRhIHlhbmcgbWVtaWxpa2kgbGViaWggZGFyaSBkdWEgdmFyaWFiZWwgc2VjYXJhIGJlcnNhbWFhbi4gTWV0b2RlIGluaSBwZW50aW5nIGthcmVuYSBkYWxhbSBkdW5pYSBueWF0YSwgcGVybWFzYWxhaGFuIHlhbmcgZGloYWRhcGkgc2VyaW5na2FsaSBtZWxpYmF0a2FuIGJhbnlhayB2YXJpYWJlbCB5YW5nIGJlcmthaXRhbi4gQW5hbGlzaXMgbXVsdGl2YXJpYXQgZGlndW5ha2FuIHVudHVrIG1lbWFoYW1pIGh1YnVuZ2FuIGRhbiBwb2xhIGRpIGFudGFyYSB2YXJpYWJlbC12YXJpYWJlbCB0ZXJzZWJ1dCBzZWNhcmEgc2ltdWx0YW4uDQoNCiAgU2FsYWggc2F0dSB0ZWtuaWsgYW5hbGlzaXMgbXVsdGl2YXJpYXQgeWFuZyBiYW55YWsgZGlndW5ha2FuIGFkYWxhaCAqTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiAoTURTKS4gTURTIGJlcnR1anVhbiB1bnR1ayBtZXJlcHJlc2VudGFzaWthbiBvYmplay1vYmplayBkYWxhbSBiZW50dWsgdGl0aWstdGl0aWsgcGFkYSBydWFuZyBiZXJkaW1lbnNpIHJlbmRhaCBiZXJkYXNhcmthbiBqYXJhayBhdGF1IGtlbWlyaXBhbiBhbnRhciBvYmplay4gT2JqZWsgeWFuZyBkaWFuYWxpc2lzIHBhZGEgcHJha3Rpa3VtIGluaSBhZGFsYWggMzggcHJvdmluc2kgZGkgSW5kb25lc2lhIGRlbmdhbiB2YXJpYWJlbC12YXJpYWJlbCBla29ub21pIGRhbiBzb3NpYWwgc2VwZXJ0aSBVcGFoIE1pbmltdW0gUmVnaW9uYWwgKFVNUiksIFRpbmdrYXQgUGFydGlzaXBhc2kgQW5na2F0YW4gS2VyamEgKFRQQUspLCBkYW4gSW5kZWtzIEhhcmdhIEtvbnN1bWVuIChJSEspLiBNZW5nZ3VuYWthbiBNRFMsIGRpaGFyYXBrYW4gZGFwYXQgZGlwZXJvbGVoIGdhbWJhcmFuIHBvc2lzaSByZWxhdGlmIGFudGFyIHByb3ZpbnNpIHNlcnRhIHBlbmd1a3VyYW4ga3VhbGl0YXMgcmVwcmVzZW50YXRpZiB0ZXJzZWJ1dCBtZWxhbHVpIG5pbGFpIHN0cmVzcy4NCg0KIyMgUnVtdXNhbiBNYXNhbGFoDQpCZXJkYXNhcmthbiBsYXRhciBiZWxha2FuZywgZGFwYXQgZGlydW11c2thbiBwZXJtYXNhbGFoYW4gc2ViYWdhaSBiZXJpa3V0Og0KDQoxLiAgYmFnYWltYW5hIGphcmFrIGtlbWlyaXBhbiBhbnRhciAzOCBwcm92aW5zaSBiZXJkYXNhcmthbiB2YXJpYWJlbCBVTVIsIFRQQUssIGRhbiBJSEs/DQoyLiAgQmFnYWltYW5hIHZpc3VhbGlzYXNpIGtvb3JkaW5hdCBzZXRpYXAgcHJvdmluc2kgcGFkYSBwbG90ICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmcqPw0KMy4gIEJlcmFwYSBuaWxhaSBzdHJlc3MgeWFuZyBkaXBlcm9sZWggZGFyaSBwZW1vZGVsYW4gKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogKE1EUykgZGFuIHNlYmVyYXBhIGJhaWsgcmVwcmVzZW50YXNpIGRhdGEgZGFsYW0gZGltZW5zaSByZW5kYWg/DQoNCiMjIFR1anVhbiBQZW5lbGl0aWFuDQpUdWp1YW4gZGFyaSBwZW5lbGl0aWFuIHByYWt0aWt1bSBpbmkgYWRhbGFoIHNlYmFnYWkgYmVyaWt1dDoNCg0KMS4gIE1lbmVudHVrYW4gamFyYWsgYXRhdSBrZW1pcmlwYW4gYW50YXIgcHJvdmluc2kgYmVyZGFzYXJrYW4gdmFyaWFiZWwgVU1SLCBUUEFLLCBkYW4gSUhLDQoyLiAgTWVuZ2hhc2lsa2FuIHBsb3Qga29vcmRpbmF0IHlhbmcgbWVyZXByZXNlbnRhc2lrYW4gcG9zaXNpIHNldGlhcCBwcm92aW5zaSBkYWxhbSBydWFuZyBiZXJkaW1lbnNpIHJlbmRhaCBtZWxhbHVpIG1ldG9kZSAqTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiAoTURTKQ0KMy4gIE1lbmdoaXR1bmcgZGFuIG1lbmdldmFsdWFzaSBuaWxhaSBzdHJlc3Mgc2ViYWdhaSBpbmRpa2F0b3Iga3VhbGl0YXMgaGFzaWwgKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogKE1EUykNCg0KIyBUaW5qYXVhbiBQdXN0YWthDQoNCiMjICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmcqIChNRFMpDQoqTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiAoTURTKSBhZGFsYWggbWV0b2RlIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lcmVwcmVzZW50YXNpa2FuIGtlc2FtYWFuIGF0YXUga2V0aWRha3NhbWFhbiBqYXJhayBwZXJiZWRhYW4gYW50YXIgb2JqZWsgKFN1cnlhYnJhdGEsIDIwMDApLiBTZW1ha2luIG1pcmlwIHN1YXR1IG9iamVrIGRlbmdhbiBvYmplayBsYWlubnlhLCBzZW1ha2luIGRla2F0IGphcmFrIGFudGFyLW9iamVrIHRlcnNlYnV0LiBTZWJhbGlrbnlhLCBzZW1ha2luIGphdWggamFyYWsgYW50YXItb2JqZWssIHNlbWFraW4gYmVzYXIgcGVyYmVkYWFuIGF0YXUga2V0aWRha3NhbWFhbm55YQ0KDQojIyBKZW5pcy1qZW5pcyAqTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiAoTURTKQ0KSmVuaXMgKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogKE1EUykgYmVyZGFzYXJrYW4gc2thbGEgZGF0YSB0ZXJiYWdpIG1lbmphZGkgZHVhIGJlbnR1ayB1dGFtYSwgeWFpdHUgTURTIG1ldHJpayB1bnR1ayBza2FsYSBkYXRhIGludGVydmFsIGF0YXUgcmFzaW8gZGFuIE1EUyBub24tbWV0cmlrIHVudHVrIHNrYWxhIGRhdGEgbm9taW5hbCBhdGF1IG9yZGluYWwuIEtlZHVhIHBlbmRla2F0YW4gaW5pIGJlcmJlZGEgZGFsYW0gY2FyYSBtZW5nb2xhaCBkYXRhIGphcmFrIGF0YXUga2V0aWRha21pcmlwYW4gc2VydGEgYXN1bXNpIHlhbmcgZGlndW5ha2FuIGRhbGFtIHByb3NlcyBwZW1ldGFhbg0KDQojIyMgKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogTWV0cmlrDQoqTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiBNZXRyaWsgYWRhbGFoIHBlbmRla2F0YW4gTURTIHlhbmcgbWVuZ2d1bmFrYW4gZGF0YSBqYXJhayBhdGF1IGtldGlkYWttaXJpcGFuIGJlcnNrYWxhIGludGVydmFsIGF0YXUgcmFzaW8uIFBhZGEgbWV0b2RlIGluaSwgaHVidW5nYW4gYW50YXJhIGphcmFrIGFzbGkgZGVuZ2FuIGphcmFrIGhhc2lsIHBlbWV0YWFuIGRpYW5nZ2FwIGJlcnNpZmF0IGxpbmllci4gQXJ0aW55YSwgTURTIGJlcnVzYWhhIG1lbXBlcnRhaGFua2FuIHByb3BvcnNpIGphcmFrIGFudGFycm9idXMgc2ViYWdhaW1hbmEgdGVyY2VybWluIGRhbGFtIGRhdGEgYXdhbC4gSmlrYSBqYXJhayBhbnRhcmEgZHVhIG9iamVrIGRhbGFtIGRhdGEgYXNsaSBsZWJpaCBiZXNhciwgbWFrYSBvYmplayB0ZXJzZWJ1dCBha2FuIGRpdGVtcGF0a2FuIGxlYmloIGphdWggZGFsYW0gcnVhbmcga29uZmlndXJhc2kgTURTLg0KDQojIyMgKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyBub24tKm1ldHJpaw0KKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogbm9uLW1ldHJpayBtZXJ1cGFrYW4gcGVuZGVrYXRhbiB5YW5nIG1lbmdndW5ha2FuIGluZm9ybWFzaSBrZXRpZGFrbWlyaXBhbiBiZXJiYXNpcyBvcmRpbmFsLCB5YWl0dSBoYW55YSBtZW1wZXJ0aW1iYW5na2FuIHVydXRhbiAqKHJhbmtpbmcpKiBkYXJpIHRpbmdrYXQga2VtaXJpcGFuIGFudGFyIG9iamVrLiBUaWRhayBzZXBlcnRpICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmcqIG1ldHJpayB5YW5nIG1lbXBlcnRhaGFua2FuIGJlc2FyYW4gamFyYWssIG5vbi1tZXRyaWsgaGFueWEgbWVtYXN0aWthbiBiYWh3YSB1cnV0YW4gamFyYWsgYW50YXIgb2JqZWsgZGkgZGFsYW0ga29uZmlndXJhc2kgaGFzaWwgdGV0YXAga29uc2lzdGVuIGRlbmdhbiB1cnV0YW4gcGFkYSBkYXRhIGFzbGkuDQoNCiMjIyBNYW5mYWF0ICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmcqIChNRFMpDQoqTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiAoTURTKSBzYW5nYXQgYmVybWFuZmFhdCBkYWxhbSBiZXJiYWdhaSBiaWRhbmcgeWFuZyBtZW1lcmx1a2FuIHZpc3VhbGlzYXNpIGh1YnVuZ2FuIGFudGFyIG9iamVrIGtvbXBsZWtzLCBtYW5mYWF0ICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmcqIChNRFMpIGFudGFyYSBsYWluOg0KDQoxLiAgTWVsYWt1a2FuIHBlbmdlbG9tcG9ra2FuIGRhbiBwZW1ldGFhbiBodWJ1bmdhbiB5YW5nIGtvbXBsZWtzIGFudGFyIG9iamVrIGRhbGFtIHJ1YW5nIGJlcmRpbWVuc2kgcmVuZGFoLCBzZWhpbmdnYSBtZW1idWF0IGRhdGEgeWFuZyBzdWxpdCBkaXBhaGFtaSBtZW5qYWRpIGxlYmloIG11ZGFoIGRpaW50ZXJwcmV0YXNpa2FuIGRhbiBkaWFuYWxpc2lzLg0KMi4gIE1lbmdpZGVudGlmaWthc2kgcG9sYS1wb2xhIGh1YnVuZ2FuIHlhbmcgbXVuZ2tpbiB0ZXJzZW1idW55aSBkYWxhbSBkYXRhIHlhbmcgYmVzYXIgYXRhdSBrb21wbGVrcy4NCjMuICBNZW5kYXBhdGthbiBwb3Npc2kgcmVsYXRpZiBzdWF0dSBvYmplayBkaWJhbmRpbmdrYW4gb2JqZWsgbGFpbg0KDQojIyBMYW5na2FoLWxhbmdrYWggKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogKE1EUykNClByb3NlZHVyICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmcqIChNRFMpIHBhZGEgZGFzYXJueWEgYmVydHVqdWFuIHVudHVrIG1lbmd1YmFoIGluZm9ybWFzaSBrZXRpZGFrbWlyaXBhbiBhbnRhciBvYmplayBtZW5qYWRpIHJlcHJlc2VudGFzaSBnZW9tZXRyaXMgZGFsYW0gcnVhbmcgYmVyZGltZW5zaSByZW5kYWguIFNlY2FyYSB1bXVtLCBsYW5na2FoLWxhbmdrYWggcGVsYWtzYW5hYW4gTURTIG1lbGlwdXRpIHBlbWJlbnR1a2FuIG1hdHJpa3MgamFyYWssIHRyYW5zZm9ybWFzaSBtYXRyaWtzIGphcmFrIG1lbmphZGkgbWF0cmlrcyBHcmFtLCBkZWtvbXBvc2lzaSBuaWxhaSBlaWdlbiwgcGVuZW50dWFuIGtvbmZpZ3VyYXNpIHRpdGlrLCBkYW4gZXZhbHVhc2kgbWVuZ2d1bmFrYW4gbmlsYWkgc3RyZXNzLg0KDQojIyMgTWF0cmlrcyBKYXJhaw0KVGFoYXAgYXdhbCBkYWxhbSAqTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiAoTURTKSBhZGFsYWggdGFoYXBhbiBtZW1iZW50dWsgbWF0cmlrcyBqYXJhayAqKGRpc3NpbWlsYXJpdHkgbWF0cml4KSogeWFuZyBtZW5nZ2FtYmFya2FuIHRpbmdrYXQga2VtaXJpcGFuIGF0YXUga2V0aWRha21pcmlwYW4gYW50YXIgb2JqZWsuIEphcmFrIGRhcGF0IGRpaGl0dW5nIG1lbmdndW5ha2FuIGJlcmJhZ2FpIHVrdXJhbiB0ZXJnYW50dW5nIGthcmFrdGVyaXN0aWsgZGF0YSwgZHVhIHlhbmcgcGFsaW5nIHVtdW0geWFpdHU6DQoNCjEuICBKYXJhayBFdWNsaWRlYW4gKihFdWNsaWRlYW4gRGlzdGFuY2UpKg0KJCQNCmRfe2lqfSA9XHNxcnR7XHN1bV97az0xfV57cH0oeF97aWt9LXhfe2prfSleMn0NCiQkDQoqKktldGVyYW5nYW4qKg0KDQp8IE5vdGFzaSB8IERlc2tyaXBzaSB8DQp8Oi0tLS0tLS06fDotLS0tLS0tLS0tOnwNCnwgJGRfe2lqfSQgfCBqYXJhayBhbnRhcmEgb2JqZWsga2UtaSBkYW4gb2JqZWsga2UtaiB8DQp8ICR4X3tpa30kIHwgbmlsYWkgb2JqZWsga2UtaSBwYWRhIHZhcmlhYmVsIGtlLWsgfA0KfCAkeF97amt9JCB8IG5pbGFpIG9iamVrIGtlLWogcGFkYSB2YXJpYWJlbCBrZS1rIHwNCnwgJHAkIHwganVtbGFoIHZhcmlhYmVsIHlhbmcgZGlndW5ha2FuIHwNCg0KDQoyLiAgIEphcmFrIE1hbmhhdHRhbiAqKE1hbmhhdHRhbiBEaXN0YW5jZSkqDQokJA0KZF97aWp9ID0gXHN1bV97az0xfV57cH0gXGxlZnR8eF97aWt9LXhfe2prfVxyaWdodHwNCiQkDQoNCioqa2V0ZXJhbmdhbjoqKg0KDQp8IE5vdGFzaSB8IERlc2tyaXBzaSB8DQp8Oi0tLS0tLS06fDotLS0tLS0tLS0tOnwNCnwgJGRfe2lqfSQgfCBqYXJhayBhbnRhcmEgb2JqZWsga2UtaSBkYW4gb2JqZWsga2UtaiB8DQp8ICR4X3tpa30kIHwgbmlsYWkgb2JqZWsga2UtaSBwYWRhIHZhcmlhYmVsIGtlLWsgfA0KfCAkeF97amt9JCB8IG5pbGFpIG9iamVrIGtlLWogcGFkYSB2YXJpYWJlbCBrZS1rIHwNCnwgJHAkIHwganVtbGFoIHZhcmlhYmVsIHlhbmcgZGlndW5ha2FuIHwNCg0KDQojIyMgUHJveWVrc2kgTWF0cmlrcyBKYXJhayBrZSBNYXRyaWtzIEdyYW0NClNldGVsYWggbWF0cmlrcyBqYXJhayBkaXBlcm9sZWgsIGxhbmdrYWggYmVyaWt1dG55YSBhZGFsYWggbWVuZ29udmVyc2kgamFyYWsgbWVuamFkaSBtYXRyaWtzIEdyYW0gKEIpIG1lbGFsdWkgcHJvc2VzICpkb3VibGUtY2VudGVyaW5nKi4gTWF0cmlrcyBHcmFtIG1lcnVwYWthbiByZXByZXNlbnRhc2kgKmlubmVyIHByb2R1Y3QqIGRhcmkgdGl0aWstdGl0aWsgZGFsYW0gcnVhbmcgbXVsdGlkaW1lbnNpb25hbC4gVHJhbnNmb3JtYXNpIGRpbGFrdWthbiBtZW5nZ3VuYWthbiBydW11czoNCg0KJCQNCkIgPSAtIFxmcmFjezF9ezJ9SkReMiBKDQokJA0KDQoqKktldGVyYW5nYW4qKg0KDQp8IE5vdGFzaSB8IERlc2tyaXBzaSB8DQp8Oi0tLS0tLS06fDotLS0tLS0tLS0tOnwNCnwgJEReMiQgfCBtYXRyaWtzIGphcmFrIGt1YWRyYXQgJGReMl97aWp9JCB8DQp8ICRKJCB8IG1hdHJpa3MgKmNlbnRlcmluZyogfA0KfCAkQiQgfCBtYXRyaWtzIEdyYW0gfA0KDQpNYXRyaWtzIEdyYW0geWFuZyBha2FuIG1lbmphZGkgZGFzYXIgdW50dWsgbWVuZGFwYXRrYW4ga29vcmRpbmF0IG9iamVrLiBNYXRyaWtzIEdyYW0gYWthbiBkaWRla29tcG9zaXNpIHVudHVrIG1lbmNhcmkga29vcmRpbmF0IGhhc2lsIE1EUy4NCg0KIyMjIERla29tcG9zaXNpIE5pbGFpIEVpZ2VuDQpNYXRyaWtzIEdyYW0gQiBrZW11ZGlhbiBkaWRla29tcG9zaXNpIG1lbmdndW5ha2FuIGRla29tcG9zaXNpIG5pbGFpIGVpZ2VuDQoNCiQkDQpCID0gVSBEIFZeVA0KJCQNCg0KKipLZXRlcmFuZ2FuKioNCg0KfCBOb3Rhc2kgfCBEZXNrcmlwc2kgfA0KfDotLS0tLS0tOnw6LS0tLS0tLS0tLTp8DQp8ICRVJCB8IG1hdHJpa3MgZWlnZW52ZWN0b3J8DQp8ICREJCB8IG1hdHJpa3MgZGlhZ29uYWwgeWFuZyBiZXJpc2kgZWlnZW52YWx1ZXwNCnwgJFZeVCQgfCAqdHJhbnNwb3NlKiBkYXJpIG1hdHJpa3MgZWlnZW52ZWN0b3IgfA0KDQpFaWdlbnZhbHVlIHBvc2l0aWYgZGlndW5ha2FuIHVudHVrIG1lbmVudHVrYW4gZGltZW5zaSBydWFuZyBzb2x1c2ksIHNlbWVudGFyYSBlaWdlbnZlY3RvciB0ZXJrYWl0IGRpZ3VuYWthbiB1bnR1ayBtZW1iZW50dSBrb25maWd1cmFzaSB0aXRpay4NCg0KIyMjIEtvbmZpZ3VyYXNpIFRpdGlrDQpLb29yZGluYXQgaGFzaWwgKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogZGliZW50dWsgZGVuZ2FuIG1lbmdndW5ha2FuOg0KDQokJA0KWCA9IFVfcCBEXntcZnJhY3sxfXsyfX1fe3B9DQokJA0KDQoqKktldGVyYW5nYW4qKg0KDQp8IE5vdGFzaSB8IERlc2tyaXBzaSB8DQp8Oi0tLS0tLS06fDotLS0tLS0tLS0tOnwNCnwgJFVfcCQgfCBlaWdlbnZlY3RvciB1bnR1ayAkcCQgZWlnZW52YWx1ZSB0ZXJiZXNhciBkYW4gcG9zaXRpZnwNCnwgJEReXGZyYWN7MX17Mn1fcCQgfCBha2FyIGRhcmkgZWlnZW52YWx1ZSBwb3NpdGlmIHV0YW1hfA0KDQpIYXNpbG55YSBhZGFsYWgga29uZmlndXJhc2kgdGl0aWstdGl0aWsgZGFsYW0gcnVhbmcgYmVyZGltZW5zaSByZW5kYWggeWFuZyBtZW5nZ2FtYmFya2FuIG9iamVrLW9iamVrIGJlcmRhc2Fya2FuIGtlbWlyaXBhbiBhdGF1IGtldGlkYWttaXJpcGFubnlhLg0KDQojIyMgTmlsYWkgU3RyZXNzDQpNZW5nZXZhbHVhc2kga3VhbGl0YXMgcGVtZXRhYW4gbWVuZ2d1bmFrYW4gbmlsYWkgc3RyZXNzLCB5YW5nIG1lbmd1a3Ugc2VqYXVoIG1hbmEgamFyYWsgZGFsYW0ga29uZmlndXJhc2kgKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogbWFtcHUgbWVyZXByZXNlbnRhc2lrYW4gamFyYWsgYXNsaQ0KDQokJA0KXHRleHR7U3RyZXNzfSA9IFxzcXJ0e1xmcmFje1xzdW1fe2kgXG5lIGp9IChkX3tpan0gLSBcaGF0e2R9X3tpan0pXnsyfQ0KfXsNClxzdW1fe2kgXG5lIGp9IGRfe2lqfV57Mn0NCn0NCn0NCiQkDQoNCioqS2V0ZXJhbmdhbioqDQoNCnwgTm90YXNpIHwgRGVza3JpcHNpIHwNCnw6LS0tLS0tLTp8Oi0tLS0tLS0tLS06fA0KfCAkKGRfe2lqfSAtIFxoYXR7ZH1fe2lqfSleezJ9JCB8IGphcmFrIGFzbGkgYW50YXJhIG9iamVrIGtlLWkgZGFuIGtlLWp8DQp8ICAkZF97aWp9XnsyfSR8IGphcmFrIGhhc2lsIHBlbWV0YWFuICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmd8DQoNCioqVGFiZWwgS3JpdGVyaWEgTmlsYWkgU3RyZXNzKioNCg0KfCBOaWxhaSBTdHJlc3MgfCBLcml0ZXJpYSB8DQp8Oi0tLS0tLS0tLS06fDotLS0tLS0tLS0tOnwNCnwgJD4yMFwlJCB8IEJ1cnVrIHwNCnwgJDEwXCUgLSAyMFwlJCB8IEN1a3VwIHwNCnwgJDUuMVwlIC0gMTBcJSQgfCBCYWlrIHwNCnwgJDIuNVwlLTVcJVwlJCB8IFNhbmdhdCBCYWlrIHwNCnwgJDwyLjVcJSQgfCBTZW1wdXJuYSB8DQoNClNlbWFraW4ga2VjaWwgbmlsYWkgU3RyZXNzIG1ha2EgaHVidW5nYW4gbW9ub3RvbiB5YW5nIHRlcmJlbnR1ayBhbnRhcmEga2V0aWRha3NhbWFhbiBkZW5nYW4gZGlzcGFydGllcyBzZW1ha2luIGJhaWsgKGRpZGFwYXQga2VzZXN1YWlhbikgZGFuIGtyaXRlcmlhIHBldGEgcGVyc2Vwc2kgeWFuZyB0ZXJiZW50dWsgc2VtYWtpbiBzZW1wdXJuYQ0KDQojIyBTdW1iZXIgRGF0YQ0KRGF0YSBwZW5lbGl0aWFuIGluaSBkaXBlcm9sZWggZGFyaSB0aWdhIGluZGlrYXRvciBla29ub21pIHV0YW1hIHlhbmcgZGlrdW1wdWxrYW4gYmVyZGFzYXJrYW4gMzggcHJvdmluc2kgZGkgSW5kb25lc2lhLiBEYXRhIGJlcnNpZmF0IHNla3VuZGVyIGRhbiBiZXJhc2FsIGRhcmkgbGVtYmFnYSByZXNtaSBwZW1lcmludGFoLCB5YWl0dSBLZW1lbnRlcmlhbiBLZXRlbmFnYWtlcmphYW4gKEtlbW5ha2VyKSBkYW4gQmFkYW4gUHVzYXQgU3RhdGlzdGlrIChCUFMpDQoNCmRlbmdhbiB2YXJpYWJlbCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCjEuIFgxID0gVXBhaCBNaW5pbXVtIFJlZ2lvbmFsIChVTVIpLg0KMi4gWDIgPSBJbmRla3MgSGFyZ2EgS29uc3VtZW4gKElISykuIA0KMy4gWDMgPSBUaW5na2F0IFBhcnRpc2lwYXNpIEFuZ2thdGFuIEtlcmphIChUUEFLKS4NCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoRFQpDQoNCiMgSW1wb3J0IGRhdGENCmRhdGEgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvbmF6YWwvT25lRHJpdmUvRG9rdW1lbi9TdGF0aXN0aWNzL1NFTUVTVEVSIDUvQU5BTElTSVMgTVVMVElWQVJJQVQvTEFQUkFLMl9BTk1VTC54bHN4IikNCg0KIyBUYWJlbCBpbnRlcmFrdGlmDQpkYXRhdGFibGUoDQogIGRhdGEsDQogIG9wdGlvbnMgPSBsaXN0KA0KICAgIHBhZ2VMZW5ndGggPSA1LA0KICAgIGF1dG9XaWR0aCA9IFRSVUUNCiAgKQ0KKQ0KYGBgDQoNCiMjIFR1anVhbg0KQW5hbGlzaXMgaW5pIGRpbGFrdWthbiB1bnR1ayBtZW1ldGFrYW4ga29uZGlzaSBla29ub21pIDM4IHByb3ZpbnNpIGRpIEluZG9uZXNpYSBiZXJkYXNhcmthbiB0aWdhIGluZGlrYXRvciB1dGFtYSAoVU1SLCBJSEssIGRhbiBUUEFLKSBhZ2FyIG1lbmRhcGF0a2FuOg0KDQoxLiBNZW5nZ2FtYmFya2FuIGtlbWlyaXBhbiBhdGF1IGtldGlkYWttaXJpcGFuIGFudGFyIHByb3ZpbnNpLg0KMi4gTWVsaWhhdCBwb2xhIHBlbmdlbG9tcG9ra2FuICooY2x1c3RlcmluZykqIGtvbmRpc2kgZWtvbm9taS4NCjMuIE1lbWJlcmlrYW4gZ2FtYmFyYW4gdmlzdWFsIGtvbmRpc2kgZWtvbm9taS4NCjQuIE1lbmphZGkgZGFzYXIgYW5hbGlzaXMgbGFuanV0YW4sIHVudHVrIG1lbmVudHVrYW4gcHJpb3JpdGFzIGtlYmlqYWthbiwgQW5hbGlzaXMgcGVyYmVkYWFuIHBlbWJhbmd1bmFuIGRhZXJhaCwgSWRlbnRpZmlrYXNpIHByb3ZpbnNpIHlhbmcgcGVybHUgaW50ZXJ2ZW5zaSBla29ub21pDQoNClR1anVhbiB1dGFtYSBhbmFsaXNpcyBpbmkgYWRhbGFoIG1lbmd1YmFoIGRhdGEgZWtvbm9taSBtdWx0aXZhcmlhdCBhbnRhciBwcm92aW5zaSBtZW5qYWRpIHJlcHJlc2VudGFzaSB2aXN1YWwgeWFuZyBtZW51bmp1a2thbiBodWJ1bmdhbiBrZWRla2F0YW4gYW50YXIgcHJvdmluc2kgYmVyZGFzYXJrYW4gVU1SLCBJSEssIGRhbiBUUEFLLCBzZWhpbmdnYSBwZW5lbGl0aSBkYXBhdCBtZW1haGFtaSBwb2xhLCBrZW1pcmlwYW4sIGRhbiBrZWxvbXBvayBla29ub21pIHJlZ2lvbmFsIGRpIEluZG9uZXNpYS4NCg0KIyBTT1VSQ0UgQ09ERQ0KDQojIyBMaWJyYXJ5DQpgYGB7ciwgcHJvbXB0ID0gVH0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShNQVNTKQ0KYGBgDQoNCjEuICAqKkxpYnJhcnkgTUFTUyoqICooTW9kZXJuIEFwcGxpZWQgU3RhdGlzdGljcyB3aXRoIFMpKiBtZXJ1cGFrYW4gc2VidWFoICpwYWNrYWdlKiBkYWxhbSBiYWhhc2EgcGVtcm9ncmFtYW4gUiB5YW5nIGRpa2VtYmFuZ2thbiBvbGVoIFZlbmFibGVzIGRhbiBSaXBsZXkuICpQYWNrYWdlKiBpbmkgYmFueWFrIGRpZ3VuYWthbiBkYWxhbSBiaWRhbmcgc3RhdGlzdGlrIHRlcmFwYW4ga2FyZW5hIG1lbnllZGlha2FuIGJlcmJhZ2FpIGZ1bmdzaSBkYW4gKmRhdGFzZXQqIHlhbmcgbWVuZHVrdW5nIHBlbW9kZWxhbiBzZXJ0YSBhbmFsaXNpcyBzdGF0aXN0aWsga29tcGxla3MuIFNhbGFoIHNhdHUgZnVuZ3NpIHBlbnRpbmcgZGFsYW0gTUFTUyBhZGFsYWggY21kc2NhbGUoKSB5YWl0dSBmdW5nc2kgdW50dWsgbWVsYWt1a2FuICpDbGFzc2ljYWwgTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiAoTURTKS4gVGVrbmlrIGluaSBkaWd1bmFrYW4gdW50dWsgbWVtZXRha2FuIGRhdGEgamFyYWsgYXRhdSBkaXNzaW1pbGFyaXRhcyBrZSBydWFuZyBiZXJkaW1lbnNlaSByZW5kYWggKDIgYXRhdSAzIGRpbWVuc2kpIHNlaGluZ2dhIHBvbGEgYW50YXIgb2JqZWsgZGFwYXQgZGl2aXN1YWxpc2FzaWthbiBzZWNhcmEgbGViaWggbXVkYWgNCg0KMi4gICoqTGlicmFydCBzdGF0cyoqIG1lcnVwYWthbiBwdXN0YWthIGJhd2FhbiAqKGJ1aWx0IGluKSogc3VkYWggdGVyc2VkaWEgc2VjYXJhIG90b21hdGlzIGRpIGRhbGFtIGlzbnRhbGFzaSBzdGFuZGFyIFIuIE9sZWgga2FyZW5hIGl0dSwgbGlicmFyeSBpbmkgdGlkYWsgbWVtZXJsdWthbiBpbnN0YWxhc2kgdGFtYmFoYW4gZGFuIGxhbmdzdW5nIGRhcGF0IGRpZ3VuYWthbi4NCg0KMy4gICoqTGlicmFyeSByZWFkeGwqKiB1bnR1ayBtZW1iYWNhIGZpbGUgRXhjZWwga2UgZGFsYW0gUg0KDQojIyBJbXBvciBEYXRhDQoNCmBgYHtyLCBwcm9tcHQgPSBUfQ0KZGF0YSA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9uYXphbC9PbmVEcml2ZS9Eb2t1bWVuL1N0YXRpc3RpY3MvU0VNRVNURVIgNS9BTkFMSVNJUyBNVUxUSVZBUklBVC9MQVBSQUsyX0FOTVVMLnhsc3giKQ0KYGBgDQoNCiMjIFBsb3QuLi4NCg0KYGBge3J9DQpwbG90KGRhdGEkVU1SLCBkYXRhJFRQQUssDQogICAgIHhsYWIgPSAiVXBhaCBNaW5pbXVtIFJlZ2lvbmFsIChVTVIpIiwNCiAgICAgeWxhYiA9ICJUaW5na2F0IFBhcnRpc2lwYXNpIEFuZ2thdGFuIEtlcmphIChUUEFLKSIsDQogICAgIG1haW4gPSAiU2NhdHRlcnBsb3QgVU1SIHZzIFRQQUsiLA0KICAgICBwY2ggPSAxOSwgY29sID0gIm5hdnkiKQ0KYGBgDQoNCmBgYHtyfQ0KcGxvdChkYXRhJFVNUiwgZGF0YSRJSEssDQogICAgIHhsYWIgPSAiVXBhaCBNaW5pbXVtIFJlZ2lvbmFsIChVTVIpIiwNCiAgICAgeWxhYiA9ICJJbmRla3MgSGFyZ2EgS29uc3VtZW4gKElISykiLA0KICAgICBtYWluID0gIlNjYXR0ZXJwbG90IFVNUiB2cyBJSEtLIiwNCiAgICAgcGNoID0gMTksIGNvbCA9ICJuYXZ5IikNCmBgYA0KDQpgYGB7cn0NCnBsb3QoZGF0YSRUUEFLLCBkYXRhJElISywNCiAgICAgeGxhYiA9ICJUaW5na2F0IFBhcnRpc2lwYXNpIEFuZ2thdGFuIEtlcmphIChUUEFLKSAiLA0KICAgICB5bGFiID0gIkluZGVrcyBIYXJnYSBLb25zdW1lbiAoSUhLKSIsDQogICAgIG1haW4gPSAiU2NhdHRlcnBsb3QgVFBBSyB2cyAiLA0KICAgICBwY2ggPSAxOSwgY29sID0gIm5hdnkiKQ0KYGBgDQoNCiMjIFNPVVJDRSBDT0RFDQoNCmBgYHtyLCBwcm9tcHQ9VFJVRX0NCiMgZGF0YSB5YW5nIGRpZ3VuYWthbg0KZGF0YSA9IHJlYWRfZXhjZWwoIkM6L1VzZXJzL25hemFsL09uZURyaXZlL0Rva3VtZW4vU3RhdGlzdGljcy9TRU1FU1RFUiA1L0FOQUxJU0lTIE1VTFRJVkFSSUFUL0xBUFJBSzJfQU5NVUwueGxzeCIpDQpEYXRhID0gc2NhbGUoZGF0YVssLSgxOjIpXSkNCkRhdGENCiMgbWVuZ2hpdHVuZyBqYXJhaw0KRCA9IGFzLm1hdHJpeChkaXN0KERhdGEpKQ0KDQojIG1lbmdoaXR1bmcgZWlnZW4NCkEgPSBEXjINCkkgPSBkaWFnKDM4KQ0KSiA9IG1hdHJpeChyZXAoMSwzOCksIG5yb3cgPSAzOCwgbmNvbCA9IDM4KQ0KViA9IEkgLSAoMS8zOCkgKiBKDQoNCmFhID0gViAlKiUgQQ0KQkIgPSBhYSAlKiUgVg0KQiA9ICgtMS8yKSAqIEJCDQplaWdlbl9yZXN1bHQgPSBlaWdlbihCKQ0KZWlnZW52YWx1ZXMgPSBlaWdlbl9yZXN1bHQkdmFsdWVzDQplaWdlbnZlY3RvcnMgPSBlaWdlbl9yZXN1bHQkdmVjdG9ycw0KDQojIG1lbmdoaXR1bmcgdGluZ2thdCBrdW11bGF0aWYga2VyYWdhbWFuDQpjdW11bGF0aXZlX3ZhcmlhbmNlID0gY3Vtc3VtKGVpZ2VudmFsdWVzKSAvIHN1bShlaWdlbnZhbHVlcykNCg0KIyB0aXRpayBrb29yZGluYXQgb2JqZWsNCmZpdCA9IGNtZHNjYWxlKEQsIGsgPSAyKQ0KDQojIHZpc3VhbGlzYXNpDQpwbG90KGZpdCwNCiAgICAgeGxhYiA9ICJEaW1lbnNpIDEiLA0KICAgICB5bGFiID0gIkRpbWVuc2kgMiIsDQogICAgIHBjaCA9IDE2LCBjZXggPSAwLjUpDQp0ZXh0KGZpdFssMV0sIGZpdFssMl0sIGxhYmVscyA9IDE6bnJvdyhkYXRhKSwgcG9zID0gMywgY2V4ID0gMC41KQ0KDQoNCiMgaGl0dW5nIGRpc3Bhcml0aWVzDQpkaXNwYXJ0aWVzID0gbWF0cml4KDAsIG5yb3cgPSAzOCwgbmNvbCA9IDM4KQ0KDQpmb3IgKGkgaW4gMTozOCl7DQogIGZvcihqIGluIDE6Mzgpew0KICAgIGRpc3BhcnRpZXNbaSxqXSA9IHNxcnQoc3VtKChmaXRbaSxdIC0gZml0W2osXSleMikpDQogIH0NCn0NCg0KIyBoaXR1bmcgc3RyZXNzDQpzdHJlc3MgPSBzcXJ0KHN1bShEIC0gZGlzcGFydGllcyleMikgLyBzdW0oRF4yKQ0Kc3RyZXNzDQpjYXQoIk5pbGFpIFN0cmVzczoiLCBzdHJlc3MsICJcbiIpDQoNCmBgYA0KDQojIEhBU0lMIERBTiBQRU1CQUhBU0FODQoNCiMjIFN0YXRpc3Rpa2EgRGVza3JpcHRpZg0KMS4gIFJpbmdrYXNhbiBkYXRhIHVudHVrIFVwYWggTWluaW11bSBSZWdpb25hbCAoVU1SKQ0KYGBge3J9DQpzdW1tYXJ5KGRhdGEkVU1SKQ0Kc2QoZGF0YSRVTVIpDQpgYGANCg0KMi4gIFJpbmdrYXNhbiBkYXRhIHVudHVrIFRpbmdrYXQgUGFydGlzaXBhc2kgQW5na2F0YW4gS2VyamEgKFRQQUspDQpgYGB7cn0NCnN1bW1hcnkoZGF0YSRUUEFLKQ0Kc2QoZGF0YSRUUEFLKQ0KYGBgDQoNCjMuICBSaW5na2FzYW4gZGF0YSB1bnR1ayBJbmRla3MgSGFyZ2EgS29uc3VtZW4gKElISykNCmBgYHtyfQ0Kc3VtbWFyeShkYXRhJElISykNCnNkKGRhdGEkSUhLKQ0KYGBgDQoNCiMjIE5pbGFpIEVpZ2VuIGRhbiBLdW11bGF0aWYgS2VyYWdhbWFuDQoNCmBgYHtyLCBwcm9tcHQgPSBUfQ0KZWlnZW52YWx1ZXMNCmN1bXVsYXRpdmVfdmFyaWFuY2UNCmBgYA0KDQpCZXJkYXNhcmthbiBOaWxhaSBlaWdlbiB5YW5nIGRpZGFwYXRrYW4gZGFwYXQgZGloaXR1bmcgS3VtdWxhdGlmIGtlcmFnYW1hbiBkYXRhIHlhbmcgZGFwYXQgZGlqZWxhc2thbi4gTmlsYWkgcGVydGFtYSB5YWl0dSAwLjU3OTIgYXJ0aW55YSBkaW1lbnNpIHBlcnRhbWEgc3VkYWggbWVuamVsYXNrYW4gc2VraXRhciAkNTcuOVwlJCAga2VyYWdhbWFuIHRvdGFsLCBzZWxhbmp1dG55YSBuaWxhaSBrZWR1YSAwLjg0NzQgc2V0ZWxhaCBtZW5hbWJhaCBkaW1lbnNpIGtlZHVhIHRvdGFsIGtlcmFnYW1hbiB5YW5nIGJpc2EgZGlqZWxhc2thbiBtZW5qYWRpICQ4NC43NFwlJCBkYW4gZGltZW5zaSBrZXRpZ2EgMSBhdGF1ICQxMDBcJSQuIEthcmVuYSB0b3RhbCAkPjgwXCUkIHRvdGFsIGtlcmFnYW1hbiBzdWRhaCBkaWFuZ2dhcCBiYWlrLCBtYWthIHZpc3VhbGlzYXNpIGFrYW4gbWVuZ2d1bmFrYW4gMiBkaW1lbnNpLg0KDQojIyBUaXRpayBLb29yZGluYXQgUGFkYSBEaW1lbnNpIDINCmBgYHtyLCBwcm9tcHQgPSBUfQ0KZml0DQpgYGANCg0KU2V0aWFwIG9iamVrIG1lbmRhcGF0a2FuIGR1YSBuaWxhaSBrb29yZGluYXQsIHNhdHUgdW50dWsgZGltZW5zaSAxIGRhbiBzYXR1IHVudHVrIGRpbWVuc2kgMi4gS29vcmRpbmF0IGluaSBhZGFsYWggcmVwcmVzZW50YXNpIHBvc2lzaSBvYmplayBiZXJkYXNhcmthbiBwb2xhIGtlbWlyaXBhbiBhdGF1IGtldGlkYWttaXJpcGFubnlhLiBPYmplayB5YW5nIHB1bnlhIG5pbGFpIGtvb3JkaW5hdCBtaXJpcCBhdGF1IGJlcmRla2F0YW4gYmVyYXJ0aSBqYXJha255YSBqdWdhIGRla2F0IHBhZGEgZGF0YSBhc2xpLCBzZWRhbmdrYW4gb2JqZWsgeWFuZyBwb3Npc2kga29vcmRpbmF0bnlhIGphdWggbWVudW5qdWtrYW4gYmFod2EgaHVidW5nYW4gYW50YXIgb2JqZWsgdGVyc2VidXQgbWVtYW5nIGphdWggZGFsYW0gbWF0cmlrcyBqYXJhayBhd2FsLg0KDQojIyBLb29yZGluYXQgUG9zaXNpIFBhZGEgUGxvdCAyIERpbWVuc2kNCmBgYHtyLCBwcm9tcHQgPSBUfQ0KcGxvdChmaXQsDQogICAgIHhsYWIgPSAiRGltZW5zaSAxIiwNCiAgICAgeWxhYiA9ICJEaW1lbnNpIDIiLA0KICAgICBwY2ggPSAxNiwgY2V4ID0gMC41KQ0KdGV4dChmaXRbLDFdLCBmaXRbLDJdLCBsYWJlbHMgPSAxOm5yb3coZGF0YSksIHBvcyA9IDMsIGNleCA9IDAuNSkNCmBgYA0KDQpWaXN1YWxpc2FzaSBtYXNpbmctbWFzaW5nIHByb3ZpbnNpIHNlc3VhaSBkZW5nYW4gdXJ1dGFuIGtlLTEgc2FtcGFpIGtlLTM4IHBhZGEgcGxvdCB0ZXJsaWhhdCBiYWh3YSBwcm92aW5zaSBrZS0zOCB0ZXJsaWhhdCBzYW5nYXQgamF1aCBkYXJpIHRpdGlrIGxhaW4gYXJ0aW55YSB0ZXJkYXBhdCBrZXRpZGFrbWlyaXBhbiBhbnRhcmEgcHJvdmluc2kga2UtMzggZGVuZ2FuIHByb3ZpbnNpLXByb3ZpbnNpIGxhaW4gYmVyZGFzYXJrYW4gdmFyaWFiZWwgVU1SLCBUUEFLLCBkYW4gSUhLLg0KDQojIyBEaXNwYXJ0aWVzDQoNCmBgYHtyLCBwcm9tcHQgPSBUfQ0KZGlzcGFydGllcw0KYGBgDQoNCk1hdHJpa3MgZGlzcGFydGllcyBhZGFsYWggbWF0cmlrcyBiZXJkaW1lbnNpICQzOCBcdGltZXMgMzgkIHVudHVrIG1lbmdoaXR1bmcgamFyYWsgYmFydSBhbnRhciB0aXRpayBoYXNpbCAqTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nKiAoTURTKQ0KDQojIyBOaWxhaSBTdHJlc3MNCmBgYHtyLCBwcm9tcHQgPSBUfQ0KY2F0KCJOaWxhaSBTdHJlc3M6Iiwgc3RyZXNzLCAiXG4iKQ0KYGBgDQoNCk5pbGFpIHN0cmVzcyBzZWJlc2FyIDAuMDM4MzMxMSBhdGF1ICQzLjgzM1wlJCBtZW51bmp1a2thbiBiYWh3YSBrb25maWd1cmFzaSBkdWEgZGltZW5zaSBiZXJoYXNpbCBtZXJlcHJlc2VudGFzaWthbiBkYXRhIGRlbmdhbiBzYW5nYXQgYmFpay4gRGlzdG9yc2kgYW50YXJhIGphcmFrIGFzbGkgZGFuIGphcmFrIGhhc2lsICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmcqIHJlbmRhaCwgc2VoaW5nZ2EgaW50ZXJwcmV0YXNpIHBvc2lzaSByZWxhdGlmIGFudGFyIG9iamVrIHBhZGEgcGV0YSBwZXJzZXBzaSBkYXBhdCBkaWFuZ2dhcCBha3VyYXQuDQoNCiMgS0VTSU1QVUxBTg0KQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzaXMgKk11bHRpZGltZW5zaW9uYWwgU2NhbGluZyogKE1EUykgeWFuZyB0ZWxhaCBkaWxha3VrYW4sIGRhcGF0IGRpc2ltcHVsa2FuIGJhaHdhIHBlbW9kZWxhbiBkdWEgZGltZW5zaSBtYW1wdSBtZXJlcHJlc2VudGFzaWthbiBodWJ1bmdhbiBrZWRla2F0YW4gYW50YXIgb2JqZWsgc2VjYXJhIGJhaWsuIEhhbCBpbmkgZGl0dW5qdWtrYW4gb2xlaCBuaWxhaSBzdHJlc3Mgc2ViZXNhciAwLjAzODMzLCB5YW5nIGJlcmFkYSBwYWRhIGthdGVnb3JpIHNhbmdhdCBiYWlrLiBEZW5nYW4gZGVtaWtpYW4sIGtvbmZpZ3VyYXNpIGR1YSBkaW1lbnNpIHlhbmcgZGloYXNpbGthbiBkaWFuZ2dhcCBha3VyYXQgdW50dWsgbWVuZ2dhbWJhcmthbiBwb2xhIGtlbWlyaXBhbiBtYXVwdW4gcGVyYmVkYWFuIGFudGFyIG9iamVrIGRhbGFtIGRhdGFzZXQuDQoNClZpc3VhbGlzYXNpICpNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmcqIChNRFMpIHlhbmcgZGloYXNpbGthbiBtZW1iZXJpa2FuIGdhbWJhcmFuIHlhbmcgamVsYXMgbWVuZ2VuYWkgcG9zaXNpIHJlbGF0aWYgYW50YXIgb2JqZWsuIE9iamVrIHlhbmcgYmVyYWRhIGJlcmRla2F0YW4gcGFkYSBwbG90IG1lbnVuanVra2FuIGthcmFrdGVyaXN0aWsgDQp5YW5nIG1pcmlwLCBzZW1lbnRhcmEgb2JqZWsgeWFuZyB0ZXJwYXV0IGphdWggbWVuZ2dhbWJhcmthbiBwZXJiZWRhYW4geWFuZyBsZWJpaCBiZXNhci4gUG9sYSBpbmkgZGFwYXQgZGltYW5mYWF0a2FuIHVudHVrIG1lbmdpZGVudGlmaWthc2kgcG90ZW5zaSBwZW5nZWxvbXBva2thbiBhbGFtaSAobmF0dXJhbCBncm91cGluZykgYXRhdSBtZW1haGFtaSBzdHJ1a3R1ciBodWJ1bmdhbiBkYWxhbSBkYXRhIHNlY2FyYSBsZWJpaCBpbnR1aXRpZi4gDQoNClNlY2FyYSBrZXNlbHVydWhhbiwgYW5hbGlzaXMgTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nIG1lbWJlcmlrYW4gcmVwcmVzZW50YXNpIHlhbmcgaW5mb3JtYXRpZiBkYW4gcmVsaWFiZWwgdGVyaGFkYXAgZGF0YSwgc2VydGEgZGFwYXQgZGlndW5ha2FuIHNlYmFnYWkgZGFzYXIgdW50dWsgaW50ZXJwcmV0YXNpIGxlYmloIGxhbmp1dCBtYXVwdW4gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIHBhZGEgdGFoYXAgYW5hbGlzaXMgYmVyaWt1dG55YS4gDQoNCg0KIyBEQUZUQVIgUFVTVEFLQQ0KUmFua2luLCBKLiBILiAoMTk4MykuIE11bHRpZGltZW5zaW9uYWwgU2NhbGluZzogQSBSZXZpZXcgb2YgTGl0ZXJhdHVyZS4gSW4gUHN5Y2hvbG9naWNhbCBCdWxsZXRpbiwgOTQoMyksIDQ5MS01MDEuIA0KDQpDaGF0ZmllbGQsIEMuLCAmIENvbGxpbnMsIEEuIEouICgxOTg0KS4gSW50cm9kdWN0aW9uIHRvIE11bHRpZGltZW5zaW9uYWwgU2NhbGluZy4gTG9uZG9uOiBIZWluZW1hbm4gRWR1Y2F0aW9uYWwgQm9va3Mu